嘿伙计们,我有这个触发器:
create or replace TRIGGER T_MINDESTLAGERMENGE
BEFORE INSERT OR UPDATE ON ET_LISTE
for each row
declare
lagermenge number := 0;
minlagermenge number := 0;
menge_et number :=0;
BEGIN
select count(*) into menge_et from lager where lager.a_nr = :new.et_nr;
if menge_et = 0 then
raise_application_error(-20222, 'Artikel nicht gefunden. Es wurde nachbestellt');
end if;
select lager.lagermenge into lagermenge from lager where :new.et_nr = lager.a_nr;
select lager.mindestlagermenge into minlagermenge from lager where :new.et_nr = lager.a_nr;
if (lagermenge - :new.et_menge) < 0 then
raise_application_error(-20111, 'Nachbestellung IST NICHT MÖGLICH! bei art:' || :new.et_nr);
elsif (lagermenge - :new.et_menge) < minlagermenge then
DBMS_OUTPUT.PUT_LINE('trigger works');
raise_application_error(-20222, 'minmenge unterschritten. Es wurde nachbestellt');
end if;
END;
我有这个程序:https ://pastebin.com/rM6cA6zc 我已将程序放在 pastebin 的一个文件中,这样它可能更具可读性
所以这就是问题所在。正如你所看到的,我在触发器中抛出了一个异常,并在“其他人的异常”中的“ermittle einzelteile”中捕获它。但事情是这样的:正如您在打印异常之前所看到的,我打印“触发器工作”只是为了确保它已执行但不会在采购中处理。
我总是得到这个结果:
trigger works
ORA-20222: minmenge unterschritten. Es wurde nachbestellt
ORA-065
Artikel E300 wurde bereits nachbestellt
bin in excepion when others then-1
trigger works
pauftrag failed. error:ORA-20222: minmenge unterschritten. Es wurde nachbestellt
ORA-065
所以它实际上以某种方式忽略了我的 ifs 和 elses 并将我的触发异常作为未处理的异常抛出(“pauftrag failed.error:ORA-20222: minmenge unterschritten.Es wurde nachbestellt”);
“pauftrag failed.error:.....”只有在确实存在未知异常或异常-20111(我抛出的异常)时才会出现。