sql >> Database teknologi >  >> RDS >> Oracle

Hvordan rejser man en undtagelse i en trigger? Er der en måde at gøre dette på?

Du er der næsten; du skal bruge en DECLARE-blok i en trigger, hvis du vil erklære noget; det betyder, at din WHEN-sætning er det forkerte sted.

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

Et par punkter:

  1. Aldrig fange en undtagelse og kald derefter DBMS_OUTPUT.PUT_LINE; det er meningsløst. Nogen skal være der for at se resultatet for hver eneste post. Hvis du ikke ønsker, at der skal ske noget, rejs undtagelsen og fang den. Jeg har tilføjet en fejlkode til din undtagelse, så du kan fange denne uden for triggeren og håndtere den, som du vil (udskriv ikke noget til stdout).
  2. Det er et mindre punkt, men jeg har tilføjet et lille mellemrum; ikke meget. Jeg kunne i første omgang ikke se, hvor problemet var med din kode, fordi du ikke havde nogen.
  3. Du manglede semikolon efter undtagelseserklæringen og RAISE.

Læs mere om internt definerede undtagelser i dokumentationen




  1. Diagnosticering af dødvande i SQL Server 2005

  2. Opdateringer fra Microsoft Access-teamet (juni 2017)

  3. 10 nyttige Microsoft Access-genveje, når du arbejder med kontrolelementer på formularer og rapporter

  4. Skift fra MySQL til PostgreSQL - tips, tricks og gode råd?