【发布时间】: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 违规并继续进行。
标签: oracle exception plsql database-trigger