sql >> Database teknologi >  >> RDS >> Oracle

Opretter udløser, som kaster en undtagelse ved indsættelse

Vil du rejse en undtagelse (som ville forhindre indsættelsen i at lykkes)? Eller vil du tillade, at indsættelsen lykkes og skrive en streng til dbms_output buffer, der måske eller måske ikke eksisterer og måske eller måske ikke vises til et menneske, der kører indsatsen?

I begge tilfælde ønsker du, at dette skal være en trigger på rækkeniveau, ikke en udløser på sætningsniveau, så du skal tilføje for each row klausul.

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

Hvis du ønsker at rejse en undtagelse

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

Hvis du potentielt vil udskrive output, men tillade insert for at få succes

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

Selvfølgelig ville du i virkeligheden aldrig bruge en trigger til denne slags ting. I den virkelige verden ville du bruge en begrænsning.




  1. Laravel - udfyld manglende datoer og tæller fra databasen

  2. DAY() Eksempler i SQL Server (T-SQL)

  3. SQL SELECT-sætning

  4. ROWID-ækvivalent i postgres 9.2