Question

Est-il possible d'exécuter plusieurs opérations en utilisant 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 le nombre de celui-ci ...

Était-ce utile?

La solution

Vous ne pouvez avoir une instruction après la CTE. Vous pouvez cependant définir CTEs suivantes 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 remplir un curseur ref du même jeu de résultats, il peut être plus approprié de faire une des opérations suivantes:

  • créer une vue
  • Résultats de l'étape temporaire dans une table temporaire

Enfin, si la requête est assez simple, il suffit d'écrire une fois pour le compte et encore pour le curseur. La simplicité et l'emporter sur la lisibilité du principe Dry dans ce cas.

Autres conseils

Non, une clause CTE ou with est défini dans le cadre d'une seule instruction

Parfois, vous pouvez faire plus que vous pouvez vous attendre avec une seule instruction que, 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 façon dont Oracle « normale » pour stocker les jeux de résultats temporaires (si vous devez) est d'utiliser un GTT:
table GLOBAL TEMPORARY
.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top