Ir al contenido


Foto

Valor de datos en fila actualizada en un trigger


  • Por favor identifícate para responder
4 respuestas en este tema

#1 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 27 enero 2013 - 06:13

Hola amigos ahora estoy trabajando con triggers y necesito su ayuda.

Resulta que tengo una tabla cuyo nombre es PARENT que tiene las columnas (ID, DATOS1, DATOS2, CANCEL)

Tengo un procedimiento que actualiza la fila o registro CANCEL que en la columna ID es 110 o 120 o 130 o cualquier fila.

Ahora bien en un trigger de esa tabla tengo un insert que pasa los datos a otra tabla con el nombre de DETPARENT y el codigo que he hecho es este.


if(old.cancel = -1) then
    insert into detparent(detalle1, detalle2)
                    select datos1, datos2 from parent where old.id = ??????;


Como verán mi problema es que necesito saber el valor del ID de la fila que se este actualizando o hacer referencia a ese valor de alguna forma, ¿como hago eso?

Muchas Gracias.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 27 enero 2013 - 06:53

Saludos.

Si no entendí mal, creo que andas buscando esto:

IF(OLD.cancel = -1) THEN 
INSERT INTO detparent(detalle1, detalle2)
SELECT datos1, datos2 FROM parent WHERE id = NEW.ID;


Pero teniendo en cuenta que ya posees los valores que necesitas insertar puedes hacer esto:
IF (OLD.cancel = -1) THEN
INSERT INTO detparent(detalle1, detalle2)
VALUES(NEW.datos1, NEW.datos2);



  • 0

#3 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 27 enero 2013 - 09:14

Gracias Rolphy.

He probado lo que me recomiendas y funciona bien

lo que tengo hasta ahora es el siguiente código que esta en este trigger:

CREATE TRIGGER mitriger FOR parent
ACTIVE AFTER UPDATE POSITION 0
  if(new.cancelado = -1) then
            insert into detparent(detalle1, detalle2)
                    select parent.data1, parent.data2 from parent where parent.id = old.id;


Y me agrega en la tabla detparent los datos que estan en la tabla parent que corresponden al ID que estoy modificando.

Solo que por una razón que no entiendo no respeta la condición que le he puesto en if(new.cancelado = -1)
Y agrega los registros sea que cancelado sea igual a 0 o a -1

¿Que sera lo que me falta?

Gracias
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 28 enero 2013 - 12:54

Tengo un procedimiento que actualiza la fila o registro CANCEL que en la columna ID es 110 o 120 o 130 o cualquier fila.

Creo que tienes una confusión conceptual.
Una fila es un registro, pero este registro no tiene "etiqueta" alguna.
Luego una tabla está formada por tantos registros como se hayan insertado y/o eliminados. En términos reales, la tabla posee campos, o también mal llamados atributos. Que si los viéramos como una matriz serían las columnas.

Tu quisiste decir: "tengo un procedimiento que actualiza de UN registro el campo CANCEL que en ..."
Nota que la expresión "fila o registro CANCEL" no es correcta ya que CANCEL no hace a un registro, sino a un de los campos de la tabla PARENT.

Respecto a tus dudas, ¿podrías por favor reordenar tus palabras y anotar la estructura de las tablas? Me he perdido en tus explicaciones.  :( Por cierto, coloca todo el código de tus triggers. Eso ayudará a ver en que contexto están aplicando, y/o si están bien declarados.

Saludos,
  • 0

#5 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 28 enero 2013 - 08:16

Muchas gracias Delphius aprecio tus comentarios me sirven para seguir aprendiendo.

Mira después de una noche de descanso y ordenar pensamientos ya me esta funcionando el código.

De hecho probé los dos ejemplos que me dio Rolphy y trabajan muy bien, el problema era un pequeño error entre old y new en el trigger.

Muchas Gracias a ambos.

  • 0




IP.Board spam blocked by CleanTalk.