Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zgłosić wyjątek w wyzwalaczu? Czy jest na to sposób?

Jesteś prawie na miejscu; potrzebujesz bloku DECLARE w wyzwalaczu, jeśli chcesz coś zadeklarować; oznacza to, że twoja klauzula WHEN znajduje się w niewłaściwym miejscu.

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;

Skrzypce SQL

Kilka punktów:

  1. Nigdy złapać wyjątek, a następnie wywołać DBMS_OUTPUT.PUT_LINE; To bezcelowe. Ktoś musi tam być, aby zobaczyć wynik każdego rekordu. Jeśli nie chcesz, aby coś się wydarzyło, zgłoś wyjątek i złap go. Dodałem kod błędu do twojego wyjątku, dzięki czemu możesz przechwycić to poza wyzwalaczem i obsłużyć go tak, jak chcesz (nie drukuj niczego na standardowe wyjście).
  2. To drobna kwestia, ale dodałem trochę spacji; niewiele. Początkowo nie mogłem zobaczyć, gdzie był problem z twoim kodem, ponieważ go nie miałeś.
  3. Brakowało średników po deklaracji wyjątku i RAISE.

Przeczytaj więcej o wyjątkach zdefiniowanych wewnętrznie w dokumentacji




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obsługa współbieżnych aktualizacji w trybie hibernacji

  2. Czy istnieje system kontroli wersji dla zmian struktury bazy danych?

  3. Jak rozwiązać ORA-00900

  4. Jak korzystać z globalnej tabeli tymczasowej w procedurze Oracle?

  5. problem ORA-00001:naruszone ograniczenie unikatowe podczas INSERT/UPDATE