“别人那时的例外情况”会忽略if条款?

时间:2017-11-12 21:52:17

标签: sql oracle plsql procedures raiseerror

嘿伙计们,我有这个触发器:

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;

我有这个程序:Google Sheets 我已将这些过程放在pastebin中的一个文件中,因此它可以更具可读性

所以这就是问题所在。正如你所看到的那样,我在触发器中抛出一个Exception并在“其他人的异常”中的procude“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失败。错误:ORA-20222:minmenge unterschritten.Es wurde nachbestellt”);

“pauftrag失败。错误:.....”应该只出现真正的未知异常或异常-20111,这是我抛出的异常。

0 个答案:

没有答案