sql >> Database >  >> RDS >> Oracle

Hoe een uitzondering binnen een trigger te verhogen? Is er een manier om dit te doen?

Je bent er bijna; je hebt een DECLARE-blok in een trigger nodig als je iets wilt declareren; dit betekent dat uw WHEN-clausule op de verkeerde plaats staat.

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

Een paar punten:

  1. Nooit een uitzondering opvangen en vervolgens DBMS_OUTPUT.PUT_LINE aanroepen; het is zinloos. Per record moet er iemand aanwezig zijn om het resultaat te bekijken. Als je niet wilt dat er iets gebeurt, roep dan de uitzondering op en vang hem dan. Ik heb een foutcode aan uw uitzondering toegevoegd, zodat u deze buiten de trigger kunt opvangen en deze kunt afhandelen zoals u wilt (druk niets af naar stdout).
  2. Het is een klein puntje, maar ik heb wat witruimte toegevoegd; niet veel. Ik kon aanvankelijk niet zien waar het probleem zat met je code, omdat je er geen had.
  3. Je miste puntkomma's na de uitzonderingsverklaring en RAISE.

Lees meer over intern gedefinieerde uitzonderingen in de documentatie




  1. Histogram maken in PostgreSQL

  2. Voorwaardelijke JOIN-instructie SQL Server

  3. Conversie mislukt bij het converteren van datum en/of tijd van tekenreeks tijdens het invoegen van datetime

  4. Waarom duurt een Microsoft SQL Server 2012-query minuten via JDBC 4.0, maar seconden in Management Studio?