Tu y es presque; vous avez besoin d'un bloc DECLARE dans un déclencheur si vous voulez déclarer quoi que ce soit ; cela signifie que votre clause WHEN est au mauvais endroit.
create or replace trigger trig1
before update
of sal
on emp
for each row
when (new.sal < old.sal)
declare
user_xcep EXCEPTION;
PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
raise user_xcep;
end;
Violon SQL
Quelques remarques :
- Jamais intercepter une exception puis appeler DBMS_OUTPUT.PUT_LINE ; c'est inutile. Quelqu'un doit être là pour voir le résultat de chaque enregistrement. Si vous ne voulez pas que quelque chose se produise, déclenchez l'exception, puis attrapez-la. J'ai ajouté un code d'erreur à votre exception afin que vous puissiez l'attraper en dehors du déclencheur et le gérer comme vous le souhaitez (n'imprimez rien sur stdout).
- C'est un point mineur mais j'ai ajouté un petit espace; pas beaucoup. Au départ, je ne pouvais pas voir d'où venait le problème avec votre code, car vous n'en aviez pas.
- Il vous manquait des points-virgules après la déclaration d'exception et RAISE.
En savoir plus sur les exceptions définies en interne dans la documentation