我正在为数据库创建触发器。在我的触发代码中,应该使用哪个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
答案 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”代码。