sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo generar una excepción dentro de un disparador? ¿Hay alguna forma de hacer esto?

Ya casi estás ahí; necesita un bloque DECLARE en un activador si desea declarar algo; esto significa que su cláusula WHEN está en el lugar equivocado.

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;

Violín SQL

Algunos puntos:

  1. Nunca captura una excepción y luego llama a DBMS_OUTPUT.PUT_LINE; Carece de sentido. Alguien tiene que estar allí para ver el resultado de todos y cada uno de los registros. Si no desea que suceda algo, genere la excepción y luego agárrela. Agregué un código de error a su excepción para que pueda capturar esto fuera del disparador y manejarlo como desee (no imprima nada en la salida estándar).
  2. Es un punto menor, pero agregué un pequeño espacio en blanco; no mucho. Inicialmente no pude ver dónde estaba el problema con tu código porque no tenías ninguno.
  3. Le faltaban puntos y comas después de la declaración de excepción y RAISE.

Obtenga más información sobre las excepciones definidas internamente en la documentación