2009-04-29 9 views
1

Ich versuche, eine WITH-Klausel in einer Abfrage zu verwenden, aber halten Sie die NachrichtOracle mit CLAUSE funktioniert nicht?

ORA-00942 erhalten: Tabelle oder Sicht ist nicht vorhanden

Ich habe eine einfache Abfrage zu erstellen versucht, nur als Beispiel hier:

MIT
Test AS
(
SELECT COUNT (Customer_ID) FROM C ustomer
)
SELECT * FROM Test;

Aber auch diese dosen't Arbeit, es gibt nur die Meldung:

SELECT * FROM Test; 2 3 4 5 6 SQL>
SELECT * FROM Test
* FEHLER in Zeile 1:
ORA-00942: Tabelle oder Sicht sind nicht vorhanden

ich vorher noch nie die WITH-Klausel verwendet habe, Gibt es etwas Einfaches, das ich hier vermisse? Ich benutze Oracle Database 10g Enterprise Edition Version 10.2.0.1.0 - Prod Jede Beratung wäre willkommen. Vielen Dank.

Antwort

0

Werfen Sie einen Blick auf diese example

EDIT

ein sehr einfaches Beispiel:

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 
+0

Das ist die Seite, die ich ursprünglich betrachtete. Abgesehen von dem/* + materialize */Hinweis kann ich nicht sehen, was an meiner Anfrage anders ist ... –

+0

Was passiert, wenn Sie den Hinweis zu Ihrer Abfrage hinzufügen? –

+0

Gibt nur das gleiche Ergebnis. –

2

Ihr Beispiel funktioniert - gerade versucht es (SQL * Plus Protokoll folgt):

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 

Sind Sie sicher, dass Sie Berechtigungen für die Kundentabelle haben oder nicht Benötigen Sie ein Schema-Qualifikationsmerkmal dafür (wenn es in einem anderen Schema ist)?

4

Ich glaube, Sie haben eine leere Zeile in Ihrem Skript zwischen der WITH-Klausel und die 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 

das mit der Tatsache vereinbar ist, dass Sie die Fehlermeldung anzeigt berichtete über „Linie 1“ als und SQL "select * from test", wenn diese SQL in "Zeile 6" stehen soll.

+0

Das war meine Bauchreaktion –

0

Der Fehler, den Sie erhalten, bedeutet wörtlich, dass die Tabelle für die Ansicht in Ihrem aktuellen Schema nicht existiert und kein Synonym für Ihr Schema sichtbar ist. Zum Beispiel, wenn ich mich als greg anmelde und die Tabelle in bob ist, dann sollte ich die Tabelle als bob.test referenzieren.

Wie für die WITH-Syntax bin ich nicht vertraut, aber andere Antworten decken das gut.