Réponses:
Vous ne pouvez avoir qu'une seule déclaration après le CTE. Vous pouvez cependant définir des CTE ultérieurs sur la base d'un précédent:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Étant donné que vous essayez de compter les lignes et de remplir un curseur ref à partir du même jeu de résultats, il peut être plus approprié d'effectuer l'une des opérations suivantes:
Enfin, si la requête est assez simple, il suffit de l'écrire une fois pour le compte et de nouveau pour le curseur. La simplicité et la lisibilité l' emportent sur le principe DRY dans ce cas.
Non, un CTE ou une with
clause est défini dans le cadre d'une seule déclaration
Parfois, vous pouvez faire plus que ce à quoi vous vous attendez avec une seule instruction, par exemple:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
La méthode Oracle «normale» pour stocker les jeux de résultats temporaires (si vous le devez) consiste à utiliser une table GTT :
GLOBAL TEMPORARY
.