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.