Mehrere Operationen verwenden mit
Frage
Gibt es eine Möglichkeit, mehrere Vorgänge mit der Ausführung des Vorgänge auszuführen? WITH
Aussage?
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 und die Anzahl davon auswählen ...
Lösung
Sie können nur eine Aussage nach dem CTE haben. Sie können jedoch nachfolgende CTEs basierend auf einem früheren 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 demselben Ergebnissatz zu bevölkern, ist es möglicherweise angemessener, einen der folgenden zu tun:
- Erstellen Sie eine Ansicht
- Temporäre Ergebnisse in einer TEMP -Tabelle
Wenn die Abfrage einfach genug ist, schreiben Sie sie einfach einmal für die Anzahl und noch einmal für den Cursor. Einfachheit und Lesbarkeit trumpfen die TROCKEN Prinzip in diesem Fall.
Andere Tipps
Nein, ein CTE oder with
Klausel ist definiert im Rahmen einer einzigen Aussage
Manchmal können Sie jedoch mehr tun, als Sie mit einer einzigen Aussage erwarten können, z. B.:
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, um temporäre Ergebnissätze zu speichern (falls vorhanden), besteht darin, a zu verwenden GTT:
GLOBAL TEMPORARY
Tisch.