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

Erstellen eines Triggers, der beim Einfügen eine Ausnahme auslöst

Möchten Sie eine Ausnahme auslösen (die das Einfügen verhindern würde)? Oder möchten Sie zulassen, dass die Einfügung erfolgreich ist, und einen String in dbms_output schreiben Puffer, der vorhanden sein kann oder nicht und einem Menschen, der das Insert ausführt, angezeigt werden kann oder nicht?

In beiden Fällen soll dies ein Trigger auf Zeilenebene und kein Trigger auf Anweisungsebene sein, also müssen Sie den for each row hinzufügen Klausel.

CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Wenn Sie eine Ausnahme auslösen möchten

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Wenn Sie die Ausgabe möglicherweise drucken möchten, aber das insert zulassen Erfolg haben

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

In Wirklichkeit würde man für so etwas natürlich niemals einen Auslöser verwenden. In der realen Welt würden Sie eine Einschränkung verwenden.