PL/SQL Before Update触发器报错,请求修正代码
修正PL/SQL Before Update触发器代码
原代码存在的问题:
- 变量声明位置错误:
DECLARE块必须放在BEGIN之前,不能嵌套在BEGIN内部 - 变量声明语法错误:缺少数据类型,字符串变量需指定
VARCHAR2(长度)格式 - 旧值引用错误:触发器中引用旧字段值必须使用
:old前缀,原代码遗漏了冒号 - 赋值语句错误:PL/SQL赋值不需要
SET关键字,且未定义变量h,需直接给错误信息变量赋值 - 语句缺少分号:PL/SQL每条语句必须以分号结尾
修正后的触发器代码:
create or replace trigger t9 before update on test1 for each row declare err_message varchar2(100); -- 修正变量声明,指定数据类型 begin if :new.salary > :old.salary * 2 then err_message := '薪资涨幅不能超过原薪资的两倍'; -- 直接赋值错误信息 dbms_output.put_line(err_message); -- 输出错误提示 -- 若需要阻止超限的更新操作,可添加以下异常抛出语句 -- raise_application_error(-20001, '薪资涨幅超过限制,更新被终止'); end if; end; /
如果需要在薪资涨幅超限时直接终止更新操作,取消注释代码中的raise_application_error语句即可,该语句会抛出自定义异常并回滚当前更新。
内容的提问来源于stack exchange,提问作者mostafa majidi
相关产品推荐
相关产品推荐

