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

PLS-00103错误排查:自定义异常致PL/SQL存储过程编译失败

解决PL/SQL自定义异常引发的PLS-00103错误

PLS-00103错误通常是因为自定义异常的语法或位置不符合PL/SQL规范,下面是正确的实现方式,以及常见错误的排查点:

正确的存储过程示例(含自定义异常处理)

CREATE OR REPLACE PROCEDURE register_new_customer(
    p_customer_id IN NUMBER,
    p_customer_name IN VARCHAR2,
    p_email IN VARCHAR2
) IS
    -- 自定义异常必须声明在IS/AS之后、BEGIN之前的声明段
    invalid_value EXCEPTION;
BEGIN
    -- 检查输入参数是否为空
    IF p_customer_id IS NULL OR p_customer_name IS NULL OR p_email IS NULL THEN
        -- 抛出自定义异常
        RAISE invalid_value;
    END IF;

    -- 正常客户注册逻辑
    INSERT INTO customers(customer_id, customer_name, email)
    VALUES(p_customer_id, p_customer_name, p_email);

    COMMIT;
EXCEPTION
    WHEN invalid_value THEN
        -- 处理空值输入异常
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('错误:输入参数不能包含空值');
        -- 也可抛出带自定义错误码的异常,方便上层捕获
        -- RAISE_APPLICATION_ERROR(-20001, '输入参数不能包含空值');
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('未知错误:' || SQLERRM);
END register_new_customer;
/

常见错误排查点

  • 异常声明位置错误:自定义异常必须放在IS/AS之后、BEGIN之前的声明段里,不能放在执行块内部或EXCEPTION块附近,这是触发PLS-00103最常见的原因。
  • EXCEPTION块语法错误:确保EXCEPTION关键字紧跟在BEGIN块的所有执行语句之后,没有遗漏分号或其他语法错误。
  • 异常抛出方式错误:自定义命名异常必须先声明,再用RAISE 异常名;抛出;如果直接用RAISE_APPLICATION_ERROR则不需要提前声明,但这不属于自定义命名异常范畴。
  • 拼写不一致:检查invalid_value在声明、抛出、捕获时的拼写是否完全一致,拼写错误会导致语法解析失败。

如果你的代码之前触发错误,大概率是异常声明位置不对或EXCEPTION块结构有语法问题,对照上述示例调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:55:34