Відповіді:
Після CTE ви можете мати лише одне твердження. Однак ви можете визначити наступні CTE на основі попереднього:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Зважаючи на те, що ви намагаєтеся підрахувати рядки та заповнити курсор ref із того ж набору результатів, може бути доцільніше зробити одне з наступних:
Нарешті, якщо запит досить простий, просто напишіть його один раз для підрахунку та ще раз для курсору. Простота та зрозумілість козирують в цьому випадку принципом DRY .
Ні, 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
таблиці .