какой номер ошибки приложения Raise следует использовать - PullRequest
0 голосов
/ 26 июня 2018

Я создаю триггер для своей базы данных.В моем коде триггера, какой числовой аргумент я должен использовать:

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, ошибка: </p>

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 голосов
/ 29 июня 2018

Согласно документации (выберите другую версию, если это необходимо, но я не думаю, что многое изменилось).«Обработка ошибок 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 значение может быть использовано повторно, т. Е. все ваши собственные сообщения об ошибках могут использовать один и тот же код "-20001", если хотите.

...