Respuestas:
Solo puede tener una declaración después del CTE. Sin embargo, puede definir CTE posteriores en función de uno anterior:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Dado que está intentando contar las filas y llenar un cursor de referencia desde el mismo conjunto de resultados, puede ser más apropiado realizar una de las siguientes acciones:
Finalmente, si la consulta es lo suficientemente simple, solo escríbala una vez para el conteo y nuevamente para el cursor. La simplicidad y la legibilidad triunfan sobre el principio DRY en este caso.
No, un CTE o with
cláusula se define dentro del alcance de una sola declaración
Sin embargo, a veces puede hacer más de lo que podría esperar con una sola declaración, por ejemplo:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
El Oracle forma 'normal' para almacenar conjuntos de resultados temporales (si es necesario) es utilizar un GTT:
GLOBAL TEMPORARY
tabla .