sql >> Databasteknik >  >> RDS >> Oracle

Skapar utlösare som kastar ett undantag vid infogning

Vill du ta upp ett undantag (som skulle förhindra att infogningen lyckas)? Eller vill du tillåta insättningen att lyckas och skriva en sträng till dbms_output buffert som kanske eller kanske inte finns och kanske eller inte kan visas för en människa som kör inlägget?

I båda fallen vill du att detta ska vara en utlösare på radnivå, inte en utlösare på uttalandenivå, så du måste lägga till for each row klausul.

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

Om du vill ta upp ett undantag

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

Om du eventuellt vill skriva ut utdata men tillåta insert att lyckas

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

Naturligtvis, i verkligheten, skulle du aldrig använda en trigger för den här typen av saker. I den verkliga världen skulle du använda en begränsning.




  1. mysql delete, autoincrement

  2. Behöver experthjälp för att lösa mindre förändringar i rumslig datafråga

  3. Hur lägger man till kommentarer i SQL?

  4. Fullständig replikering av MySQL-databas? Idéer? Vad gör folk?