应该使用哪个Raise应用程序错误号

时间:2018-06-25 23:21:18

标签: oracle oracle11g database-trigger

我正在为数据库创建触发器。在我的触发代码中,应该使用哪个number参数:

set serveroutput on

create or replace trigger iss_bk 
  after insert on Issue 
  for each row
declare
  p integer;
  q integer;
begin
  select Available_copy 
    into p 
    from book 
    where Book.ISBN = :NEW.book_id;

  q := p - :NEW.quantity;

  if q < 0 then
     RAISE_APPLICATION_ERROR(-1722,' Exceeded available quantity of book .');
  else
     update Book set 
       Available_copy = q 
       where Book.ISBN = :NEW.book_id;
  end if;    
end;
/

输入q <0时,错误是:

ORA-21000: error number argument to raise_application_error of -1722 is out of range
ORA-06512: at "R1507090.ISS_BK", line 9

1 个答案:

答案 0 :(得分:0)

根据documentation(如果需要,请选择其他版本,但我认为变化不大)。 “处理PL / SQL错误”说:

raise_application_error(error_number, message[, {TRUE | FALSE}]);
     

其中

     
      
  • error_number是一个负整数,范围为-20000 .. -20999
  •   
  • 消息是最长2048个字节的字符串。
  •   
  • 如果可选的第三个参数为TRUE,则将错误放置在   先前的错误。如果参数为FALSE(默认值),则错误   替换所有先前的错误。
  •   

这意味着您应该使用

RAISE_APPLICATION_ERROR(-20001, 'Exceeded available quantity of book.');

可以重复使用相同的ERROR_NUMBER值,即 all (如果需要),您自己的错误消息可以共享相同的“ -20001”代码。