You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 18c单查询WITH子句含多内联函数与多CTE的语法

Oracle 18c 单查询WITH子句同时使用多个内联函数与CTE的正确语法

Oracle 18c及以上版本支持WITH子句内同时声明内联PL/SQL函数和CTE,语法遵循固定顺序规则:

  • 所有内联函数的声明必须放在所有CTE声明之前,函数和CTE不能交叉穿插书写
  • 相邻的函数、CTE声明之间用半角逗号分隔
  • 最后一个声明项(函数或CTE)末尾不要加逗号,直接衔接主查询语句即可

你给出的几段定义组合后的完整可运行示例如下(注:原示例中函数名存在拼写笔误,将function错写为fucntion,下方示例已做修正,如需保留原拼写直接替换函数名即可):

WITH
    -- 第一个内联函数
    FUNCTION function1(num IN NUMBER) RETURN NUMBER
    IS
    BEGIN
        RETURN num + 1;
    END;
    -- 逗号分隔第二个内联函数
    FUNCTION function2(num IN NUMBER) RETURN NUMBER
    IS
    BEGIN
        RETURN num + 2;
    END;
    -- 逗号分隔第一个CTE
    cte AS (SELECT 1 AS val FROM dual),
    -- 逗号分隔第二个CTE
    cte2 AS (SELECT 2 AS val FROM dual)
-- 主查询部分,可直接调用前面定义的函数、引用CTE
SELECT
    function1(cte.val) AS calc_res1,
    function2(cte2.val) AS calc_res2
FROM cte CROSS JOIN cte2;

常见语法错误避坑:

  • 不要把CTE写在内联函数之前,否则会触发ORA-32034: WITH子句中存在不支持的结构报错
  • 声明项之间不要漏写逗号,也不要在最后一个声明项末尾多写逗号,否则会触发ORA-00933: SQL命令未正确结束类报错
  • 内联函数本身的PL/SQL语法要合规,保证BEGIN/END块完整、参数与返回值类型声明正确

内容的提问来源于stack exchange,提问作者User1974

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:36:21