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 ...

War es hilfreich?

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
.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top