NECESITO UN PROCEDIMEINTO ALMACENADO QUE RECIBA FECHAS DE NACIMIENTO Y ME DIGA SI ES MAYOR DE EDAD
Publicado:
Sab Oct 06, 2007 6:25 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: AYUDA
Anuncios
claudiatopone escribió:
NECESITO UN PROCEDIMEINTO ALMACENADO QUE RECIBA FECHAS DE NACIMIENTO Y ME DIGA SI ES MAYOR DE EDAD
Tal vez te sirva este trigger (disparador):
Código:
CREATE OR REPLACE TRIGGER "COMPROBAR_MAYOR_EDAD" AFTER
INSERT ON "TABLA_USUARIOS" FOR EACH ROW declare
edad NUMBER;
mensaje CHAR(200);
begin
edad := (sysdate - :new.fecha_nacimiento) / 365;
if (edad >= 18) then
mensaje := 'El usuario ' || :new.nombre_usuario || ' es mayor de edad ';
else
mensaje := 'El usuario ' || :new.nombre_usuario || ' es menor de edad ';
end if;
raise_application_error (-20601, mensaje);
End;
Para comprobarlo hemos utilizado la siguiente tabla de Oracle:
insert into tabla_usuarios values (
'Fernando Alonso 1',
to_date('1976-01-03', 'YYYY-MM-DD'))
este devolvió el mensaje:
ORA-20601: El usuario Fernando Alonso 1 es mayor de edad
ORA-06512: at "COMPROBAR_MAYOR_EDAD", line 11
ORA-04088: error during execution of trigger 'COMPROBAR_MAYOR_EDAD'
para este otro registro:
Código:
insert into tabla_usuarios values (
'Fernando Alonso 2',
to_date('1998-01-03', 'YYYY-MM-DD'))
este devolvió el mensaje:
ORA-20601: El usuario Fernando Alonso 1 es menor de edad
ORA-06512: at "COMPROBAR_MAYOR_EDAD", line 11
ORA-04088: error during execution of trigger 'COMPROBAR_MAYOR_EDAD'
Con lo cual el disparador es correcto. Ahora tendrás que cambiar el código:
raise_application_error (-20601, mensaje);
por lo que quieras que muestre o que haga dependiendo de si es menor de edad o no.
Como ejemplo, crearemos una segunda tabla llamada "tabla_usuarios_resultado", con la siguiente estructura:
y modificaremos el trigger (disparador) para que cuando se inserte un registro en la tabla "tabla_usuarios" se añada de forma automática otro registro en la tabla "tabla_usuarios_resultado" indicando si es mayor de edad o no y la edad actual:
Código:
CREATE OR REPLACE TRIGGER "COMPROBAR_MAYOR_EDAD" AFTER
INSERT ON "TABLA_USUARIOS" FOR EACH ROW declare
edad number;
mensaje varchar(20);
begin
edad := (sysdate - :new.fecha_nacimiento) / 365;
if (edad >= 18) then
mensaje := 'Mayor de edad ';
else
mensaje := 'Menor de edad ';
end if;
insert into tabla_usuarios_resultado (nombre_usuario, mayor_edad, edad) values (:new.nombre_usuario, mensaje, edad);
End;
Publicado:
Vie Oct 19, 2007 9:41 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Resultado en la tabla tabla_usuarios_resultado
Haciendo un select podremos ver los registros insertados por el trigger de forma automática:
Código:
select * from tabla_usuarios_resultado;
NOMBRE_USUARIO - MAYOR_EDAD - EDAD
Fernando Alonso 1 - Mayor de edad - 32
Fernando Alonso 2 - Menor de edad - 10
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A