Ver Mensaje Individual
  #11 (permalink)  
Antiguo 16/09/2009, 15:06
jc3000
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 6 meses
Puntos: 43
Respuesta: restriccion de una fecha

Espera, que lo mismo se me ha encendido la bombilla.
Huesos, el RAISE_APPLICATION_ERROR, es un un error forzado por programacion pero que oracle lo trata como cualquier error suyo, es decir, se va por la parte EXCEPTION y ahí tu puedes gestionar ese "error " especifico, simplemente pones un WHEN OTHERS o no pones nada y en este ultmo caso en la pantalla o editor de sql ta saltará el tipico error : ORA-XXXXX en linea X columna Y : " Fecha erronea " y en consecuencia si, te deshace todas las operaciones DML que has hecho y aborta la ejecucion. Un trigger es simplemente un PL que en lugar de ejecutarse " a peticion " como los pl's de BBDD , se ejcutan al hacer una operacion DML en la tabla.

Sebas, prueba esto a ver si te vale, estoy en casa y lo hago de corrido, pero creo que puede valer :

CREATE OR REPLACE TRIGGER trg_emp_dob BEFORE INSERT OR UPDATE ON emp
declare
var_fecha date;
begin
BEGIN
select sysdate
into var_fecha
from dual;
IF :new.dob > var_fecha THEN
RAISE_APPLICATION_ERROR (num => -20000, msg => 'DOB Cannot be in the future');
END IF;
END;
end;