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:
- créer une vue
- afficher les résultats temporaires dans une table temporaire
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.