在 SQL 查询中使用内联函数和 CTE

Emi*_*ner 3 sql oracle

我试图在 SQL 查询中同时使用内联函数和 CTE,但我似乎无法弄清楚如何去做。我可以做一个或另一个,但不能同时做。

例如(归结为无用查询的最低限度),我可以这样做:

WITH
    FUNCTION f_test RETURN NUMBER IS
    BEGIN
        RETURN 1;
    END;
SELECT
    f_test()
FROM
    dual;
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

WITH cte_test AS (
    SELECT
        1
    FROM
        dual
)
SELECT
    *
FROM
    cte_test
Run Code Online (Sandbox Code Playgroud)

如何同时为 select 语句定义函数和 CTE?基本上我想最终得到类似的东西:

SELECT f_test(), cte_test.* FROM cte_test
Run Code Online (Sandbox Code Playgroud)

MT0*_*MT0 5

OracleSELECT文档中给出了将内联函数和子查询分解子句结合起来的语法是:

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;
Run Code Online (Sandbox Code Playgroud)

哪些输出:

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

db<>在这里摆弄