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

Problema: can't update table ... trigger [ErrorNr:1442]

Estas en el tema de Problema: can't update table ... trigger [ErrorNr:1442] en el foro de Bases de Datos General en Foros del Web. Hola, intento hacer un trigger que tras un UPDATE a una tabla me actualice también la fecha en que fue actualizada: Código PHP: CREATE DEFINER  =  ...
  #1 (permalink)  
Antiguo 28/09/2009, 09:23
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Problema: can't update table ... trigger [ErrorNr:1442]

Hola, intento hacer un trigger que tras un UPDATE a una tabla me actualice también la fecha en que fue actualizada:

Código PHP:
CREATE DEFINER 'root'@'%' TRIGGER `acta_before_upd_trAFTER UPDATE ON `acta`
  FOR 
EACH ROW
BEGIN
UPDATE acta SET fechultacc_acta 
NOW();
END
Según leí en otros hilos de este foro, esto produce un intento recursivo infinito por actualizar ...¿Entonces cómo puedo hacer para que tras actualizar o insertar una tabla en campo referente a "fechaultimaactualizacion" o "fechainsercion" queden con la fecha en que se ejecutó la operación?

También intenté el trigger que realizara la actualización tras la inserción pero tampoco me dejó.

Gracias!!
__________________
-La duda es la base del conocimiento-
  #2 (permalink)  
Antiguo 28/09/2009, 09:34
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: Problema: can't update table ... trigger [ErrorNr:1442]

Suponiendo que estás programando en MySQL:

Código sql:
Ver original
  1. CREATE DEFINER = 'root'@'%' TRIGGER `acta_before_upd_tr` AFTER UPDATE ON `acta`
  2.   FOR EACH ROW
  3. BEGIN
  4. SET NEW.fechultacc_acta = NOW();
  5. END;

Lo que tienes que hacer es manipular el registro entrante con el uso de las pseudovariables NEW y OLD.
De todos modos, se trata de algo bastante inútil, porque si lo que quieres es que te actualice un campo de esa misma tabla, simplemente en el SET de los campos enviados, incluyes esto:
fechultacc_acta = NOW()
¿Para qué hacer más?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/09/2009, 12:31
 
Fecha de Ingreso: enero-2007
Mensajes: 97
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: Problema: can't update table ... trigger [ErrorNr:1442]

Gracias gnzsoloyo, tu respuesta solucionó mi duda. El por qué ocupar un trigger para esto en vez hacerlo directamente en el código de mi aplicación era para aprender a tratar de solucionar un problema más de fondo:

Tengo una tabla "X" el cual tiene un campo "codigo" que es compuesto por "fechaInsercion-ID", estonces necesitaba que tras una inserción (o antes) este campo "codigo" se genere automaticamente. Esto si tenía que hacerlo por trigger ya que aquí otras aplicaciones que yo no controlo insertarán en mi BD. Aquí esta por si a alguien le pueda servir en alguna oportunidad

Código PHP:
CREATE DEFINER 'root'@'%' TRIGGER `X_after_ins_trBEFORE INSERT ON `X`
  FOR 
EACH ROW
BEGIN
SET 
NEW.codigo concat(
DATE_FORMAT(CURDATE(),'%y%m%d'),'-',
(
    
SELECT LPAD(AUTO_INCREMENT,5,0)
    
FROM information_schema.TABLES
    WHERE TABLE_SCHEMA 
'miBD' 
    
AND TABLE_NAME 'X')
);
END
Lo que me genera un dato del tipo: "090928-00020" (FECHAINSERCIÓN-ID)
__________________
-La duda es la base del conocimiento-
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 11:32.