MySQL - Problema de DELETE dentro de un trigger MYSQL

   
Vista:

Problema de DELETE dentro de un trigger MYSQL

Publicado por Pablo Bittar pablob@alexsa.com.py (3 intervenciones) el 27/02/2015 21:19:19
Buenas, soy principiante en mysql.

No puedo ejecutar un DELETE dentro de un trigger after update.
La misma sentencia DELETE se ejecuta sin drama fuera del trigger.

Espero que puedan ayudarme. Saludos.
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

Problema de DELETE dentro de un trigger MYSQL

Publicado por Pedro (54 intervenciones) el 27/02/2015 21:58:24
Si el Delete es sobre la misma tabla que esta el Trigger no vas a poder
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

Problema de DELETE dentro de un trigger MYSQL

Publicado por Pablo Bittar (3 intervenciones) el 02/03/2015 12:32:46
Entiendo, este no es el caso ya que el trigger se ejecuta sobre una tabla llamada calls, y el delete sobre otra tabla llamada migra.

Basicamente lo que sucedes es lo siguiente.

El trigger se dispara luego de que se actualice una fila en la tabla calls. El trigger hace una insercion dentro de migra.

La table calls crea una fila, luego de colgar una llamada (en elastix) el registro se actualiza.

Mi problema es que el trigger inserta 2 registros en el migra, es decir, el trigger se dispara 2 veces y yo solo necesito que se dispare cuando actualiza la fila en la tabla calls.


OBS.: en elastix cuando un agente atiende la llamada la tabla calls crea una fila con el ID de llamada y casi todos los campos nulos, cuando el agente corta la llamada se actualizan todos los campos que estaban NULL.

Espero que puedan ayudarme!

Saludos.
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

Problema de DELETE dentro de un trigger MYSQL

Publicado por Pablo Bittar (3 intervenciones) el 03/03/2015 20:17:24
ESTE TRIGGER SE DISPARA CADA VEZ QUE SE INSERTA Y QUE SE ACTUALIZA UNA FILA.. DEBE SER SOLO CADA VEZ QUE SE ACTUALIZA.. QUE HAGO MAL?


CREATE TRIGGER migra_online
AFTER UPDATE ON calls
FOR EACH ROW
BEGIN
DECLARE id integer(10);
DECLARE phone varchar(32);
DECLARE fecha_llamada datetime;
DECLARE duration integer(10);
DECLARE status varchar(32);
DECLARE conta integer(10);
DECLARE cod_operador varchar(32);
DECLARE situacion_cliente varchar(250);
DECLARE fec_promesa_pago varchar(10);
DECLARE promesa_pago varchar(250);
DECLARE fec_proximo_llamado varchar(250);
DECLARE comentario varchar(250);
DECLARE nro_campana varchar(128);
DECLARE cod_cliente varchar(128);

SET @id=old.id;
SET @phone=new.phone;
SET @status=new.status;
SET @fecha_llamada=new.fecha_llamada;
SET @duration=new.duration;

IF (@status = 'Success') OR (@status = 'Failure') THEN
SET @cod_operador = (SELECT B.number
FROM calls A, agent B
WHERE A.id_agent = B.id
AND A.id = @id);
SET @situacion_cliente = (SELECT D.value
FROM form_data_recolected D, form_field E
WHERE D.id_form_field = E.id
AND D.id_form_field = 1
AND D.id_calls = @id);
SET @fec_promesa_pago = (SELECT D.value
FROM form_data_recolected D, form_field E
WHERE D.id_form_field = E.id
AND D.id_form_field = 2
AND D.id_calls = @id);
SET @promesa_pago = (SELECT D.value
FROM form_data_recolected D, form_field E
WHERE D.id_form_field = E.id
AND D.id_form_field = 5
AND D.id_calls = @id);
SET @fec_proximo_llamado = (SELECT D.value
FROM form_data_recolected D, form_field E
WHERE D.id_form_field = E.id
AND D.id_form_field = 6
AND D.id_calls = @id);
SET @comentario = (SELECT D.value
FROM form_data_recolected D, form_field E
WHERE D.id_form_field = E.id
AND D.id_form_field = 7
AND D.id_calls = @id);
SET @nro_campana = (SELECT value
FROM call_attribute
WHERE columna = "Nro.Camp."
AND id_call = @id);
SET @cod_cliente = (SELECT value
FROM call_attribute
WHERE columna = "Cod.Cliente"
AND id_call = @id);

UPDATE migra
SET telefono = @phone,
estado_llamada = @status,
cod_operador = @cod_operador,
fec_hora_llamado = @fecha_llamada,
duracion_segundos = @duracion,
situacion_cliente = @situacion_cliente,
fec_promesa_pago = @fec_promesa_pago,
promesa_pago = @promesa_pago,
fec_proximo_llamado = @fec_proximo_llamado,
comentario = @comentario,
nro_campana = @nro_campana,
cod_cliente = @cod_cliente,
fec_mov = now()
WHERE id = @id;
SET @conta = (SELECT ROW_COUNT());
IF @conta < 1 THEN
INSERT INTO migra
(id,
telefono,
estado_llamada,
cod_operador,
fec_hora_llamado,
duracion_segundos,
situacion_cliente,
fec_promesa_pago,
promesa_pago,
fec_proximo_llamado,
comentario,
nro_campana,
cod_cliente,
fec_mov,
procesado)
VALUES ((@id),
(@phone),
(@status),
(@cod_operador),
(@fecha_llamada),
(@duration),
(@situacion_cliente),
(@fec_promesa_pago),
(@promesa_pago),
(@fec_proximo_llamado),
(@comentario),
(@nro_campana),
(@cod_cliente),
(now()),
(0));
END IF;
END IF;
END;
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