Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie löst man eine Ausnahme innerhalb eines Triggers aus? Gibt es eine Möglichkeit, dies zu tun?

Du bist fast da; Sie benötigen einen DECLARE-Block in einem Trigger, wenn Sie etwas deklarieren möchten. das bedeutet, dass Ihre WHEN-Klausel an der falschen Stelle steht.

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

Ein paar Punkte:

  1. Niemals eine Ausnahme abfangen und dann DBMS_OUTPUT.PUT_LINE aufrufen; es ist sinnlos. Jemand muss da sein, um das Ergebnis für jeden einzelnen Datensatz zu sehen. Wenn Sie nicht möchten, dass etwas passiert, lösen Sie die Ausnahme aus und fangen Sie sie dann ab. Ich habe Ihrer Ausnahme einen Fehlercode hinzugefügt, damit Sie dies außerhalb des Triggers abfangen und wie gewünscht behandeln können (geben Sie nichts an stdout aus).
  2. Es ist ein kleiner Punkt, aber ich habe ein wenig Leerzeichen hinzugefügt; nicht viel. Ich konnte anfangs nicht erkennen, wo das Problem mit Ihrem Code lag, weil Sie keinen hatten.
  3. Dir fehlten Semikolons nach der Ausnahmeerklärung und RAISE.

Lesen Sie mehr über intern definierte Ausnahmen in der Dokumentation