Mehrere Operationen mit WITH


16

Gibt es eine Möglichkeit, mehrere Operationen mit der WITHAnweisung 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 und deren Anzahl auswählen ...

Antworten:


17

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:

  • Erstellen Sie eine Ansicht
  • Stellen Sie temporäre Ergebnisse in eine temporäre Tabelle

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.