Использование встроенной функции и CTE в запросе SQL - PullRequest
3 голосов
/ 31 января 2020

Я пытаюсь использовать как встроенную функцию, так и CTE в запросе SQL, и я не могу понять, как это сделать. Я могу сделать один или другой, но не оба.

Например (сводится к минимуму бесполезных запросов), я могу сделать:

WITH
    FUNCTION f_test RETURN NUMBER IS
    BEGIN
        RETURN 1;
    END;
SELECT
    f_test()
FROM
    dual;

, и я могу сделать это :

WITH cte_test AS (
    SELECT
        1
    FROM
        dual
)
SELECT
    *
FROM
    cte_test

Как определить функцию и CTE для оператора select? По сути, я хочу получить что-то вроде:

SELECT f_test(), cte_test.* FROM cte_test

1 Ответ

5 голосов
/ 31 января 2020

Синтаксис приведен в Oracle SELECT документации , которая объединит вашу функцию встроенных функций и подфакторинга подстановки:

WITH
    FUNCTION f_test RETURN NUMBER IS
    BEGIN
        RETURN 1;
    END;
cte_test ( id ) AS (
  SELECT 1 FROM DUAL
)
SELECT f_test(),
       c.*
FROM   cte_test c;

Какие выходные данные:

F_TEST() | ID
-------: | -:
       1 |  1

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...