Wiele operacji za pomocą Z


16

Czy istnieje sposób na wykonanie wielu operacji przy użyciu WITHinstrukcji?

Coś jak

WITH T AS
(
  SELECT * FROM Tbl
)
BEGIN
  OPEN P_OUTCURSOR FOR
    SELECT * FROM T;

  SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;

Chcę wybrać niektóre dane i ich liczbę ...

Odpowiedzi:


17

Możesz mieć tylko jedną instrukcję po CTE. Możesz jednak zdefiniować kolejne CTE na podstawie poprzedniego:

WITH t1 AS (
   SELECT a, b, c
   FROM table1
)
, t2 AS (
   SELECT b
   FROM t1
   WHERE a = 5
)
SELECT *
FROM t2;

Biorąc pod uwagę, że próbujesz policzyć wiersze i wypełnić kursor referencyjny z tego samego zestawu wyników, bardziej odpowiednie może być wykonanie jednej z następujących czynności:

  • utwórz widok
  • tymczasowe wyniki etapowe w tabeli tymczasowej

Wreszcie, jeśli zapytanie jest dość proste, po prostu napisz je raz dla liczby i ponownie dla kursora. Prostota i czytelność przewyższają w tym przypadku zasadę OSUSZANIA .


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.