Respostas:
Você só pode ter uma declaração após o CTE. No entanto, você pode definir CTEs subsequentes com base em um anterior:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Como você está tentando contar as linhas e preencher um cursor ref a partir do mesmo conjunto de resultados, pode ser mais apropriado fazer o seguinte:
Por fim, se a consulta for bastante simples, basta escrevê-la uma vez para a contagem e novamente para o cursor. Simplicidade e legibilidade superam o princípio DRY neste caso.
Não, uma CTE ou with
cláusula é definida no escopo de uma única instrução
Às vezes, você pode fazer mais do que poderia esperar com uma única declaração, por exemplo:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
O Oráculo maneira 'normal' para armazenar conjuntos de resultados temporários (se você tiver que) é usar um GTT:
GLOBAL TEMPORARY
mesa .