Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Proponer
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Nick


Contraseña


Nuevo usuario


English
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - AYUDA
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information AYUDA

Publicar nuevo tema Responder al tema
Foros de discusión » Oracle Database, motor de base de datos profesional   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
claudiatopone
Usuario


Registrado: Oct 06, 2007
Mensajes: 1

Asunto: AYUDA Responder citando

NECESITO UN PROCEDIMEINTO ALMACENADO QUE RECIBA FECHAS DE NACIMIENTO Y ME DIGA SI ES MAYOR DE EDAD
MensajePublicado:
Sab Oct 06, 2007 6:25 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: AYUDA Responder citando



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:
Código:

create table tabla_usuarios (
  nombre_usuario varchar(100) PRIMARY KEY NOT NULL,
  fecha_nacimiento date)


Insertando los siguientes registros:
Código:

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:
Código:

create table tabla_usuarios_resultado (
  nombre_usuario varchar(100) PRIMARY KEY NOT NULL,
  mayor_edad varchar(100),
  edad integer)


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;
MensajePublicado:
Vie Oct 19, 2007 9:41 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Resultado en la tabla tabla_usuarios_resultado Responder citando

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
MensajePublicado:
Vie Oct 19, 2007 9:53 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Oracle Database, motor de base de datos profesional  

Cambiar a:  
Key
  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
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+