web-development-kb-eu.site

Mehrere Operationen mit WITH

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

16
BrunoLM

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:

  • erstellen Sie eine Ansicht
  • stufe temporäre Ergebnisse in einer temporären Tabelle

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 .

17
Nick Chammas

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
.