Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problemas con trigger

Estas en el tema de Problemas con trigger en el foro de Oracle en Foros del Web. Hola compañeros aca con una consulta respecto a un trigger, digamos q tengo 2 tablas de la cual una replica algunos datos de la otra ...
  #1 (permalink)  
Antiguo 20/02/2018, 10:25
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Problemas con trigger

Hola compañeros aca con una consulta respecto a un trigger, digamos q tengo 2 tablas de la cual una replica algunos datos de la otra (eran 2 aplicaciones q se juntaron)

tabla A y tabla B tienen estas 2 columnas en comun IdTicket y IdFecha y los datos de la tabla A se copiaron en la tabla B:

IdTicket - IdFecha
1 - 1
1 - 2
1 - 3
2 - 1
2 - 2
3 - 1
3 - 2

que se insertan cuando actualizo la pagina, ahora cuando elimino un dato de la tabla A necesito que se elimine de la tabla B

digamos:

IdTicket - IdFecha
1 - 2

este es mi trigger
Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER delete_fechas
  2. AFTER DELETE ON TB_ACTIVIDAD_FECHA
  3. FOR EACH ROW
  4. BEGIN
  5.     DELETE FROM ACCESO_SALA_FECHAS A
  6.     WHERE A.IDTICKET = :OLD.IDTICKET AND A.IDFECHA = :OLD.IDFECHA;
  7. END;

pero al hacer esto me elimina TODOS los datos del mismo idticket:

IdTicket - IdFecha
1 - 1
1 - 2
1 - 3

espero se haya entendido y si fueran amables de indicarme como solucionar esto o decirme el error q estoy cometiendo se los agradeceria.
  #2 (permalink)  
Antiguo 20/02/2018, 14:43
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problemas con trigger

Saludo
No tengo a la mano oracle, pero haciendolo en mysql
funciona correctamente, lo único es que en el DELETE
no uso alias para la tabla y no uso los : (Imagino los : son sintaxis oracle)



Código SQL:
Ver original
  1. DELETE FROM ACCESO_SALA_FECHAS
  2. WHERE IDTICKET = OLD.IDTICKET AND IDFECHA = OLD.IDFECHA;
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 20/02/2018, 15:48
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Problemas con trigger

hola bueno creo q es lo mismo no? y como digo ahi arriba me elimina casi bien si no que parece que NO toma los idfecha por lo tanto me elimina los idticket del where
  #4 (permalink)  
Antiguo 20/02/2018, 16:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problemas con trigger

Saludo, sí, debería ser similar,
en mi caso si respeta tanto el id del ticket como el id de la fecha
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 21/02/2018, 05:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problemas con trigger

Un AND es mandatorio. SI no se cumplen AMBAS condiciones, no se borra.

Lo que hay que ver es por qué está cumpliendo la condición...
Yo sugeriría que hagas una tabla de auditoría temporal y en el trigger hagas un insert a esa tabla con los valores que tiene el OLD en cada campo, así como los datos que matchean de la otra tabla.
DE esa forma al menos se entenderá por qué los borra.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:57.