Gibt es eine Möglichkeit, mehrere Operationen mit der Anweisung WITH
auszuführen?
Etwas wie
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
Ich möchte einige Daten auswählen und deren Anzahl ...
Sie können nach dem CTE nur eine Anweisung 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;
Da Sie versuchen, die Zeilen zu zählen und einen Ref-Cursor aus derselben Ergebnismenge zu füllen, ist es möglicherweise besser, einen der folgenden Schritte auszuführen:
Wenn die Abfrage einfach genug ist, schreiben Sie sie einfach einmal für die Zählung und erneut für den Cursor. Einfachheit und Lesbarkeit übertreffen in diesem Fall das Prinzip TROCKEN .
Nein, eine CTE- oder with
-Klausel ist definiert im Rahmen einer einzelnen Anweisung
Manchmal können Sie jedoch mit einer einzigen Aussage mehr tun, als Sie vielleicht erwarten, z.
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) ist die Verwendung eines GTT:GLOBAL TEMPORARY
table .