sql >> Databasteknik >  >> RDS >> Oracle

Hur höjer man ett undantag i en trigger? Finns det något sätt att göra detta?

Du är nästan där; du behöver ett DECLARE-block i en trigger om du vill deklarera något; detta betyder att din WHEN-sats är på fel plats.

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

Några punkter:

  1. Aldrig fånga ett undantag och anropa DBMS_OUTPUT.PUT_LINE; det är meningslöst. Någon måste vara där för att se resultatet för varje skiva. Om du inte vill att något ska hända, höj undantaget och fånga det sedan. Jag har lagt till en felkod till ditt undantag så att du kan fånga detta utanför triggern och hantera det som du vill (skriv inte ut något till stdout).
  2. Det är en liten punkt men jag har lagt till ett litet blanksteg; inte mycket. Jag kunde först inte se var problemet var med din kod eftersom du inte hade någon.
  3. Du saknade semikolon efter undantagsdeklarationen och RAISE.

Läs mer om internt definierade undantag i dokumentationen




  1. Pivotera flera kolumner baserat på en kolumn i SQL Server

  2. Konsten att isolera beroenden och data i databasenhetstestning

  3. Utmaningen är igång! Samhällsuppmaning för att skapa den snabbaste nummerseriegeneratorn

  4. Skillnaden mellan #temptable och ##TempTable?