sql >> Database >  >> RDS >> Oracle

Trigger maken die een uitzondering genereert bij invoegen

Wil je een uitzondering maken (die zou voorkomen dat de invoeging slaagt)? Of wil je het invoegen laten slagen en een string naar de dbms_output schrijven buffer die al dan niet bestaat en die al dan niet kan worden getoond aan een mens die de insert uitvoert?

In beide gevallen wilt u dat dit een trigger op rijniveau is en niet een trigger op instructieniveau, dus u moet de for each row toevoegen clausule.

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

Als je een uitzondering wilt maken

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

Als u mogelijk uitvoer wilt afdrukken, maar de insert . wilt toestaan slagen

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

Natuurlijk zou je in werkelijkheid nooit een trigger voor dit soort dingen gebruiken. In de echte wereld zou je een beperking gebruiken.




  1. Dagelijkse tellingen krijgen voor evenementen die niet elke dag plaatsvinden

  2. hoe meerdere waarden in een enkel veld in mysql in te voegen

  3. python mysqldb rij verwijderen

  4. Retourwaarde voor MySQL opgeslagen procedure