Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да издигнем изключение в тригер? Има ли начин да се направи това?

Почти сте там; имате нужда от блок DECLARE в тригер, ако искате да декларирате нещо; това означава, че вашата клауза WHEN е на грешното място.

create or replace trigger trig1
 before update
 of sal
 on emp
 for each row
 when (new.sal < old.sal)

declare    
   user_xcep EXCEPTION;
   PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
   raise user_xcep;
end;

SQL Fiddle

Няколко точки:

  1. Никога хванете изключение и след това извикайте DBMS_OUTPUT.PUT_LINE; безсмислено е. Някой трябва да бъде там, за да види резултата за всеки запис. Ако не искате нещо да се случи, повдигнете изключението и след това го хванете. Добавих код за грешка към вашето изключение, за да можете да хванете това извън тригера и да го обработвате както желаете (не отпечатвайте нищо в стандартен извеждащ текст).
  2. Това е незначителен момент, но добавих малко празно пространство; не много. Първоначално не можах да видя къде е проблемът с кода ви, защото нямате такъв.
  3. Липсваха ви точка и запетая след декларацията на изключението и РАЙС.

Прочетете повече за вътрешно дефинираните изключения в документацията




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между потребител и схема в Oracle?

  2. Как да намерите време за изпълнение на заявка в Oracle SQL Developer?

  3. Oracle:Импортиране на CSV файл

  4. Известие за промяна на базата данни на Oracle

  5. Как да конфигурирам UTF8 набор от символи в Oracle?