Operazioni multiple utilizzando CON
Domanda
C'è un modo per eseguire più operazioni utilizzando l'istruzione WITH
?
Qualcosa di simile
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
Voglio selezionare alcuni dati e il conteggio di esso ...
Soluzione
Si può avere solo una dichiarazione dopo il CTE. È possibile, tuttavia, definire CTE successive sulla base di un 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 compilare un cursore ref dallo stesso set di risultati, può essere più appropriato per fare una delle seguenti:
- creare una vista ??li>
- Risultati della tappa temporanei in una tabella temporanea
Infine, se la query è abbastanza semplice, basta scrivere una volta per il conteggio e di nuovo per il cursore. La semplicità e la leggibilità briscola il DRY principio in questo caso.
Altri suggerimenti
No, un CTE o clausola di with
è definito nell'ambito di una singola istruzione
A volte si può fare di più di quanto ci si potrebbe aspettare con una singola istruzione però, 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 per memorizzare set di risultati temporanei (se si deve) è quello di utilizzare un GTT:
tavolo GLOBAL TEMPORARY
.