SQL - Duda trigger - impedir el insert si es menor de edad

   
Vista:

Duda trigger - impedir el insert si es menor de edad

Publicado por wirfen (1 intervención) el 18/05/2013 10:07:23
Buenas, llevamos varios dias intentando corregir unos triggers y no hay manera.
Queremos hacer un trigger que impida insertar un empleado en la base de datos que sea menor de edad, disponemos de su fecha de nacimiento para calcular la edad y este es nuestro trigger.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace TRIGGER  MAYORIAEDAD
    BEFORE
    INSERT ON EMPLEADOS
    FOR EACH ROW
DECLARE
EDAD INTEGER;
NOMBR VARCHAR2(30);
BEGIN
SELECT ((EMPLEADOS.FECHA_NACIMIENTO - SYSDATE) / 365) INTO EDAD
FROM EMPLEADOS;
SELECT NOMBRE INTO NOMBR FROM EMPLEADOS WHERE EDAD<18.0;
IF (EDAD<18.0)
    THEN RAISE_APPLICATION_ERROR (-20600,NOMBR||'TIENE QUE SER MAYOR DE EDAD');
END IF;
END;


Nuestra tabla se compone por empleados(dni_e,nombre,apellidos,direccion,fecha_nacimiento,fecha_alta,login,contraseña,correo,telefono)

Espero nos puedan ayudar, llevamos dias sin encontrar el error.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda trigger - impedir el insert si es menor de edad

Publicado por leonardo_josue (880 intervenciones) el 20/05/2013 16:27:55
Hola wirfen:

Vayamos por partes:

1. ¿Qué motor de Base de Datos estás utilizando? aunque todos los motores se basan en SQL, existen diferencias importantes entre cada uno de ellos.

2. En tu post colocas un código, pero no nos das información al respecto... ¿El código marca algún error? si es así, ¿qué error es el que está marcando?. ¿O es acaso que el código no marca ningún error pero no hace lo que quieres?. Mucho ojo con esto, sin esta información estamos jugando al adivino.

3. Por lo general en todos los Trigges de cualquier motor de BD tienes que hacer referencias a los objetos OLD y NEW... (en tu caso como es un insert sería al objeto NEW)... es decir, que la condición debería ser más o menos así:

....
IF ((NEW.fecha_nacimiento - SYSDATE) / 365) < 18 THEN
RAISE_APPLICATION_ERROR (-20600,NOMBR||'TIENE QUE SER MAYOR DE EDAD');
END IF;
....

4. ¿Estás seguro que la fórmula que estás utilizando te calcula correctamente la edad?

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar