引发异常后 PL/SQL 继续
Posted
技术标签:
【中文标题】引发异常后 PL/SQL 继续【英文标题】:PL/SQL Continue after exception raised 【发布时间】:2019-12-16 08:01:24 【问题描述】:我有一个带有异常处理的简单触发器。我的问题是当用户收到错误消息时如何继续应用程序。
CREATE OR REPLACE TRIGGER "AR_CHECK"
BEFORE INSERT ON TABLE
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
v_check number;
cursor c_ar_check is
select ar_no
from name_view
where name_id = :new.bill_to_name_id
and name_type in ('TRAVEL_AGENT','COMPANY');
begin
open c_ar_check;
fetch c_ar_check into v_check;
close c_ar_check;
if v_check is null then
raise_application_error(-20101, 'ERROR - NUMBER MISSING');
end if;
end;
使用上面的代码,我收到了错误消息,但用户无法继续下一步。 是否有可能获得有关 NULL 值的用户警告但有可能继续?
【问题讨论】:
在触发器的范围内@Littlefoot 是绝对正确的。您的插入代码应拦截错误并通知用户,然后继续。更好的方法根本没有触发器;从您的表创建一个 FK 到 name_view(或者更确切地说是实际的基础表)。然后应用程序拦截 FK 违规并继续进行。 【参考方案1】:raise_application_error
,没有。它将终止执行。
但是,如果您将其替换为其他东西 - 一个微不足道的 dbms_output.put_line
将在测试阶段执行,而某些日志记录过程 - 例如调用(n 个自主事务)过程 - 在生产中可能是更好的选择。
如果您选择dbms_output.put_line
,请注意在程序完成之前您不会看到任何消息。
【讨论】:
以上是关于引发异常后 PL/SQL 继续的主要内容,如果未能解决你的问题,请参考以下文章