SQL - Crear una clave foranea desde un trigger

 
Vista:
sin imagen de perfil

Crear una clave foranea desde un trigger

Publicado por josselyn (4 intervenciones) el 08/06/2016 21:26:48
Tengo el siguiente trigger para crear llave primaria
1
2
3
4
5
6
7
8
9
create or replace TRIGGER TR_EMPLEADOS_BI_PRIMARIA BEFORE INSERT ON EMPLEADO FOR EACH ROW
DECLARE
nCount NUMBER;
BEGIN
SELECT COUNT(*) INTO nCount FROM EMPLEADO WHERE CODIGO_EMPLEADO = :NEW.CODIGO_EMPLEADO;
IF nCount > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'ERROR DE LA LLAVE PRIMARIA EN LA TABLA EMPLEADO');
END IF;
END;

como podria hacer para el de la foranea?
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Crear una clave foranea desde un trigger

Publicado por leonardo_josue (1173 intervenciones) el 10/06/2016 17:54:34
Hola josselyn:

Mucho ojo, el trigger no "crea" una llave primara, sino que sirve para verificar que la llave que estás tratando de insertar en la tabla EMPLEADO NO EXISTA...

De hecho, este Trigger está de más si en verdad tienes declarado tu CODIGO_EMPLEADO como una llave primaria. Sin necesidad de tener que hacer un TRIGGER el motor de BD's debe hacer una revisión de integridad antes de insertar el registro, pero bueno, si tú estás siguiendo esta lógica igual te funciona para ti...

Ahora bien, para una llave foránea, lo que debes validar es que la llave que estás tratando de insertar EXISTA en la tabla padre, es decir, sería el caso contrario que en este trigger. En el primer caso si se cumple que nCount > 0 quiere decir que la llave que buscas EXISTE en la tabla, por lo tanto debes marcar error... Para el caso de las llaves foráneas si nCount = 0 significa que la llave NO EXISTE en la tabla padre, por lo tanto debes marcar error. Se entiende???

Haz la prueba y nos comentas.

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