Кілька операцій з використанням С


16

Чи є спосіб виконати кілька операцій за допомогою WITHоператора?

Щось на зразок

WITH T AS
(
  SELECT * FROM Tbl
)
BEGIN
  OPEN P_OUTCURSOR FOR
    SELECT * FROM T;

  SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;

Я хочу вибрати деякі дані та їх кількість ...

Відповіді:


17

Після 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 .


10

Ні, 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таблиці
.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.