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
相关产品推荐
相关产品推荐

