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

Trigger dando error

Estas en el tema de Trigger dando error en el foro de Mysql en Foros del Web. hola a todos bueno yo usaba antes postgresql, pero desde q vi q mysql soporta triggers y demas, bueno desde la version 5.0.1, decidi darle ...
  #1 (permalink)  
Antiguo 04/06/2007, 15:20
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
Trigger dando error

hola a todos

bueno yo usaba antes postgresql, pero desde q vi q mysql soporta triggers y demas, bueno desde la version 5.0.1, decidi darle una oportunidad a mysql y aprovechar sus ventajas q son varias

pero a la hora de hacer un simple trigger de actualización de fecha y hora, me sale un fallo

aqui les pongo el trigger

Código:
CREATE TRIGGER insert_fecha BEFORE INSERT
    ON usuario FOR EACH ROW UPDATE usuario set FECHA_REGISTRO=now();
y este es el error q me lanza

Código:
Can't update table 'usuario' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
y la idea del trigger es q se actualice el campo de fecha_usuario. una ves q se haga una insercion de un nuevo usuario, lo hago en la db por q no vi la manera de hacerlo desde la pagina con php

espero me puedan echar una manito, para solucionar mi problema

gracias de antemano

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #2 (permalink)  
Antiguo 04/06/2007, 15:43
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Re: Trigger dando error

¿Quieres actualizar la fecha de registro de todos los usuarios al crear uno nuevo?
Bastaría con ejecutar esta instrucción:

UPDATE usuario set FECHA_REGISTRO=now();

después de cada inserción de un usuario.

El error creo entender es por que no puedes actualizar el mismo registro que da origen al trigger.
  #3 (permalink)  
Antiguo 04/06/2007, 15:49
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
Re: Trigger dando error

por alguna extraña razon queda bloqueado el registro

es lo raro en postgresql se ejecuta la insercion y luego se evalua el trigger

peor en mysql se queda bloquedo el registro hasta ejecutar las consulta completa y no se puede hacer sobre el mismo, por lo menos asi parece

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #4 (permalink)  
Antiguo 04/06/2007, 20:55
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 19 años, 6 meses
Puntos: 1
Re: Trigger dando error

hola muchachos, ya solucione el problema anterior, pero ahora me enfrasco en otro, es por la costumbre ya de posgresql creo

estoy tratando de hacer un trigger q controle la cuestion de fechas en mysql es decir comprar la correctitud de las mismas bajo describo la tabla y la idea del trigger pero no se como terminarlo y no se si hasta donde tengo esta bien


tabla proyecto
Código:
+-------------------------+--------------+------+-----+---------+-----+
| Field                             | Type          | Null | Key | Default | Extra |
+-------------------------+--------------+------+-----+---------+-----+ | COD                             | char(15)     | NO   | PRI |         |       |
| NOMBRE                      | varchar(250)    | YES  |     | NULL    |       |
| TIPO                          | varchar(250)        | YES  |     | NULL    |       |
| FECHA_INICIO                | date          | YES  |     | NULL    |       | 
| FECHA_FIN                    |    date        | YES  |     | NULL    |       |
| ENCARGADO                   | varchar(100) | YES  |     | NULL    |       |
| TELEFONO                      | int(20)      | YES  |     | NULL    |       |
| DIRECCION                     | varchar(250) | YES  |     | NULL    |       | 
| DESCRIPCION                   | varchar(500) | YES  |     | NULL    |       |
+-----------------------+--------------+------+-----+---------+-------+
Código:
DELIMITER //

CREATE TRIGGER ctrl_fecha BEFORE INSERT ON proyecto
FOR EACH ROW
BEGIN
        if (fecha_inicio<fecha_fin)
insert into proyecto values(cod, nombre, tipo, fecha_inicio,fecha_fin, encargado, telefono, direccion , descripcion); end if if (fecha_inicio>fecha_fin) //no hacer nada y imprimir un mensaje de fallo de fechas RAISE EXCEPTION ''debes revisar las fechas''; end if END;
// DELIMITER ;
por lo menos en postgresql se puede hacer esas cosas y todo perfecto, pero aqui me lanza error en sintaxis, y no se por q la verdad

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #5 (permalink)  
Antiguo 06/07/2007, 16:04
 
Fecha de Ingreso: julio-2007
Mensajes: 1
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Trigger dando error

Que tal tio... sabes estuve leyendo un poco y a mi tambien me sale el error

"Can't update table 'usuario' in stored function/trigger because it is already used by statement which invoked this stored function/trigger."

Por favor ayudame.. como lo solucionaste.. xq estoy q me mato la cabeza y me esta sacando de mis casillas por favor haber si me das una mano..

Gracias

PD: Adjunto el TRIGGER por si acaso..

-----------------------------

DELIMITER $$;

DROP TRIGGER `inicte`.`mods`$$

create trigger `mods` AFTER UPDATE on `modulo`
for each row BEGIN
UPDATE modulo
SET modulo.fecCre=Now(), modulo.usuCre=CURRENT_USER();
END;
$$modulo
DELIMITER ;$$
  #6 (permalink)  
Antiguo 12/07/2007, 06:48
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: Trigger dando error

Para ejecutar acciones en la propia tabla que dispara el trigger, no hay que emplear la clásica forma de 'UPDATE tabla SET a=1 WHERE...'.

Es así:

CREATE TRIGGER a BEFORE INSERT ON tabla
FOR EACH ROW
BEGIN
SET NEW.a = 1;
END;

Saludos!
  #7 (permalink)  
Antiguo 06/03/2008, 14:58
 
Fecha de Ingreso: marzo-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Trigger dando error

El error sucede porque tu tabla tiene motor myIsam y para poder usar triggers tiene que ser InnoDb, espero que os ayudara saludos
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 17:12.