Risposte:
Puoi avere solo un'istruzione dopo il CTE. È possibile, tuttavia, definire i CTE successivi in base a uno precedente:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Dato che si sta tentando di contare le righe e popolare un cursore ref dallo stesso set di risultati, potrebbe essere più appropriato eseguire una delle seguenti operazioni:
Infine, se la query è abbastanza semplice, basta scriverla una volta per il conteggio e ancora per il cursore. Semplicità e leggibilità superano il principio DRY in questo caso.
No, un CTE o una with
clausola è definita nell'ambito di una singola istruzione
A volte puoi fare più di quanto potresti aspettarti con una singola istruzione, ad esempio:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Il modo "normale" di Oracle di archiviare set di risultati temporanei (se necessario) è utilizzare una tabella GTT :
GLOBAL TEMPORARY
.