Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment lever une Exception dans un Trigger ? Y a-t-il un moyen de faire cela?

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 :

  1. 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).
  2. 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.
  3. 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