Вы можете иметь только одно заявление после CTE. Однако вы можете определить последующие CTE на основе предыдущего:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Учитывая, что вы пытаетесь подсчитать строки и заполнить курсор ref из того же набора результатов, может быть более целесообразно выполнить одно из следующих действий:
- создать вид
- этап временные результаты в таблице временных
Наконец, если запрос достаточно прост, просто запишите его один раз для подсчета и еще раз для курсора. В этом случае простота и удобочитаемость превосходят принцип СУХОГО .