Existe-t-il un moyen d'exécuter plusieurs opérations à l'aide de l'instruction WITH
?
Quelque chose comme
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
Je veux sélectionner des données et leur nombre ...
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 SEC dans ce cas.
Non, une clause CTE ou with
est définie dans le cadre d'une seule instruction
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 un GTT:GLOBAL TEMPORARY
table .