3

クエリで WITH 句を使用しようとしていますが、メッセージが引き続き表示されます

ORA-00942: 表またはビューが存在しません

ここでは、例として簡単なクエリを作成しようとしました。

WITH
テスト AS
(
SELECT COUNT(Customer_ID) FROM Customer
)
SELECT * FROM テスト;

しかし、これでも機能しません。メッセージが表示されるだけです。

SELECT * FROM テスト; 2 3 4 5 6 SQL>
SELECT * FROM test
* 行 1 のエラー:
ORA-00942: テーブルまたはビューが存在しません

私はこれまで WITH 句を使用したことがありません。ここで欠けている簡単なものはありますか? Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod を使用しています。アドバイスをいただければ幸いです。ありがとう。

4

5 に答える 5

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

これは、このSQLが「6行目」にあるはずなのに、「1行目」とSQL「select*fromtest」にあると報告されたエラーを受け取ったという事実と一致しています。

于 2009-04-29T13:55:37.453 に答える
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 テーブルに対する特権を持っているか、それともスキーマ修飾子が必要ないか (それが別のスキーマにある場合) は確かですか?

于 2009-04-29T11:25:32.150 に答える
1

スクリプトの先頭に追加しようとしましたか

SET SQLBLANKLINES ON;
于 2021-03-23T22:13:53.047 に答える
0

発生するエラーは、文字通り、ビューのテーブルが現在のスキーマに存在せず、スキーマに同義語が表示されないことを意味します。たとえば、gregとしてログインし、テーブルがbobにある場合、テーブルをbob.testとして参照する必要があります。

SELECT * FROM bob.test

WITH構文に関しては、私はよく知らないが、他の答えがそれをうまくカバーしている。

于 2009-04-29T14:01:00.170 に答える
0

この例を見てください

編集

非常に基本的なサンプル:

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
于 2009-04-29T09:32:51.093 に答える