Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/05/2010, 11:36
Avatar de xf_corp
xf_corp
 
Fecha de Ingreso: mayo-2008
Mensajes: 57
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problemas con triggers

Hola, echale un vistazo a esto:

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#ADFNS012
http://psoug.org/reference/exception_handling.html (WHEN OTHERS THEN with SQLCODE and SQLERRM)

Tu excepción podrías manejarla así:

CREATE TRIGGER controlExclusión
BEFORE INSERT ON escribe
FOR EACH ROW
DECLARE contador NUMBER := 0;
Modelo_Directora EXCEPTION; --//declara la excepción...
BEGIN

IF :new.id_modelo IS NOT NULL THEN

SELECT COUNT (id_modelo)
INTO contador
FROM revistas
WHERE id_modelo = :new.id_modelo;

IF contador = 1 THEN
RAISE Modelo_Directora; --//dispara la excepción...


END IF;

END IF;
EXCEPTION
WHEN Modelo_Directora THEN
Raise_application_error (-20001, 'No puedes asignar una modelo para que escriba en la revista de la cual es directora');
END;
/

pero dado que lo que aparentemente requieres es más bien solo desplegar un mensaje de información, más que manipular una excepción, podrías manejarlo de alguna de las dos formas siguientes:


CREATE TRIGGER controlExclusión
BEFORE INSERT ON escribe
FOR EACH ROW
DECLARE contador NUMBER := 0;
Modelo_Directora EXCEPTION; --//declara la excepción...
BEGIN

IF :new.id_modelo IS NOT NULL THEN

SELECT COUNT (id_modelo)
INTO contador
FROM revistas
WHERE id_modelo = :new.id_modelo;

IF contador = 1 THEN
RAISE Modelo_Directora; --//dispara la excepción...


END IF;

END IF;
EXCEPTION
WHEN Modelo_Directora THEN
dbms_output.put_line('No puedes asignar una modelo para que escriba en la revista de la cual es directora');
END;
/

ó:

CREATE TRIGGER controlExclusión
BEFORE INSERT ON escribe
FOR EACH ROW
DECLARE contador NUMBER := 0;
BEGIN

IF :new.id_modelo IS NOT NULL THEN

SELECT COUNT (id_modelo)
INTO contador
FROM revistas
WHERE id_modelo = :new.id_modelo;

IF contador = 1 THEN
dbms_output.put_line('No puedes asignar una modelo para que escriba en la revista de la cual es directora');


END IF;

END IF;

END;
/

Verifica la info en las referencias para más detalle. Espero te sea útil .

Saludos.