Odpowiedzi:
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:
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 .
Nie, CTE lub with
klauzula są zdefiniowane w zakresie pojedynczej instrukcji
Czasami możesz zrobić więcej, niż możesz się spodziewać za pomocą jednego polecenia, np .:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
„Normalne” Oracle sposób na przechowywanie tymczasowe tabele wynikowe (jeśli trzeba) jest użycie GTT:
GLOBAL TEMPORARY
stołowego .