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.