Ответы:
Вы можете иметь только одно заявление после CTE. Однако вы можете определить последующие CTE на основе предыдущего:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Учитывая, что вы пытаетесь подсчитать строки и заполнить курсор ref из того же набора результатов, может быть более целесообразно выполнить одно из следующих действий:
Наконец, если запрос достаточно прост, просто запишите его один раз для подсчета и еще раз для курсора. В этом случае простота и удобочитаемость превосходят принцип СУХОГО .
Нет, CTE или with
предложение определяется в рамках одного оператора
Иногда вы можете сделать больше, чем ожидаете, с помощью одного оператора, например:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
«Обычный» способ Oracle хранить временные наборы результатов (если вам нужно) - использовать таблицу GTT :
GLOBAL TEMPORARY
.