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:
- criar uma vista
- Estágio Resultados Temporários em uma Tabela Temp
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.