Antworten:
Sie können nur eine Anweisung nach dem CTE haben. Sie können jedoch nachfolgende CTEs basierend auf einem vorherigen definieren:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Angesichts der Tatsache, dass Sie versuchen, die Zeilen zu zählen und einen ref-Cursor aus derselben Ergebnismenge zu füllen, ist es möglicherweise sinnvoller, einen der folgenden Schritte auszuführen:
Wenn die Abfrage einfach genug ist, schreiben Sie sie einfach einmal für die Zählung und noch einmal für den Cursor. Einfachheit und Lesbarkeit trumpfen in diesem Fall das DRY- Prinzip auf.
Nein, ein CTE oder eine with
Klausel wird im Rahmen einer einzelnen Anweisung definiert
Manchmal können Sie jedoch mit einer einzelnen Anweisung mehr tun, als Sie vielleicht erwarten:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Die "normale" Oracle-Methode zum Speichern temporärer Ergebnismengen (falls erforderlich
GLOBAL TEMPORARY
) ist die Verwendung einer GTT: -Tabelle .