Oracle WITH CLAUSE不起作用?

时间:2009-04-29 09:24:42

标签: sql oracle ora-00942 with-clause

我正在尝试在查询中使用WITH子句但继续收到消息

  

ORA-00942:表或视图不存在

我试图在这里创建一个简单的查询:

  

使用
  测试AS
  (
  来自客户的SELECT COUNT(Customer_ID)
  )
  SELECT * FROM test;

但即使这样做也不行,它只是给出了信息:

  

SELECT * FROM test; 2 3 4 5 6 SQL>
  SELECT * FROM测试
                *   第1行的错误:
  ORA-00942:表或视图不存在

我之前从未使用过WITH子句,这里有什么简单的东西吗? 我使用的是Oracle数据库10g企业版10.2.0.1.0版 - Prod 任何建议将不胜感激。感谢。

5 个答案:

答案 0 :(得分:5)

我相信你的脚本在WITH子句和SELECT:

之间有一个空行
SQL> WITH
  2  test AS
  3  (
  4  SELECT COUNT(Customer_ID) FROM Customer
  5  )
  6  
SQL> select * from test;
select * from test
              *
ERROR at line 1:
ORA-00942: table or view does not exist

这与您报告的错误报告为“第1行”和SQL“select * from test”的事实一致,此时此SQL应位于“第6行”。

答案 1 :(得分:2)

您的示例有效 - 只是尝试过它(SQL * Plus日志如下):

SQL> create table customer
  2  (customer_id number);
Table created.
SQL> with 
  2  test as 
  3  (select count(customer_id)
  4  from customer
  5  )
  6  select * from test;
COUNT(CUSTOMER_ID)
------------------
         0

您确定您拥有customer表的权限,还是不需要为它设置架构限定符(如果它位于不同的架构中)?

答案 2 :(得分:0)

看看这个example

修改

一个非常基本的样本:

create table emp (emp_id number, dept_id number);
insert into emp values (1,20);
insert into emp values (2,20);
insert into emp values (3,20);
insert into emp values (4,30);

with
emp_counter  as (select count(distinct emp_id) from emp),
dept_counter as (select count(distinct dept_id) from emp)
select * from emp_counter, dept_counter;

COUNT(DISTINCTEMP_ID) COUNT(DISTINCTDEPT_ID)
--------------------- ----------------------
                    4                      2

答案 3 :(得分:0)

您获得的错误意味着您的当前架构中不存在视图表,并且您的架构没有可见的同义词。例如,如果我以greg身份登录,并且表在bob中,那么我应该将该表引用为bob.test。

SELECT * FROM bob.test

对于WITH语法,我不熟悉,但其他答案也很好。

答案 4 :(得分:0)

您是否尝试添加到脚本的顶部

SET SQLBLANKLINES ON;