Вопрос

Есть ли способ выполнить несколько операций, используя WITH утверждение?

Что-то типа

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

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

Я хочу выбрать некоторые данные и его количество ...

Это было полезно?

Решение

Вы можете иметь только одно утверждение после CTE. Вы можете, однако, определить последующие CTE на основе предыдущего:

WITH t1 AS (
   SELECT a, b, c
   FROM table1
)
, t2 AS (
   SELECT b
   FROM t1
   WHERE a = 5
)
SELECT *
FROM t2;

Учитывая, что вы пытаетесь подсчитать строки и заполнить курсор рефери с того же набора результатов, может быть более целесообразным сделать одно из следующих действий:

  • Создайте представление
  • Постановка временных результатов в таблице температуры

Наконец, если запрос достаточно прост, просто напишите его один раз для подсчета и снова для курсора. Простота и читаемость отнимают СУХОЙ Принцип в этом случае.

Другие советы

Нет, 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;

«Нормальный» способ хранить временные наборы результатов (если вам нужно) - использовать GTT:
GLOBAL TEMPORARY стол
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top