MySQL - problemas con trigger

 
Vista:

problemas con trigger

Publicado por JLiver (1 intervención) el 15/02/2011 20:09:27
Amigos, tengo un problema con un trigger el codigo es el siguiente

DELIMITER $
DROP TRIGGER IF EXISTS trigger_insert_recibo $
CREATE TRIGGER trigger_insert_recibo AFTER INSERT ON deuda
FOR EACH ROW

BEGIN

DECLARE opcion1, opcion2, opcion3, opcion4, opcion5, var1, var2, var3, var4, var5, maximo Integer;

SET opcion1 = (Select Forma_pago_idForma_pago from Deuda where Forma_pago_idForma_pago = 1 GROUP BY Forma_pago_idForma_pago);
SET opcion2 = (Select Forma_pago_idForma_pago from Deuda where Forma_pago_idForma_pago = 2 GROUP BY Forma_pago_idForma_pago);
SET opcion3 = (Select Forma_pago_idForma_pago from Deuda where Forma_pago_idForma_pago = 3 GROUP BY Forma_pago_idForma_pago);
SET opcion4 = (Select Forma_pago_idForma_pago from Deuda where Forma_pago_idForma_pago = 4 GROUP BY Forma_pago_idForma_pago);
SET opcion5 = (Select Forma_pago_idForma_pago from Deuda where Forma_pago_idForma_pago = 5 GROUP BY Forma_pago_idForma_pago);
SET var1 = 0;
SET var2 = 0;
SET var3 = 0;
SET var4 = 0;
SET var5 = 0;
SET maximo = 0;

IF opcion1 = 1 THEN
SET var1 = 0;
WHILE var1 <> 1 DO
INSERT INTO recibo (Deuda_idDeuda, monto, fecha_emision, fecha_vencimiento, Deuda_Alumno_idAlumno, Estado_idEstado, fecha_pago)
VALUES (NEW.idDeuda, NEW.monto, NEW.fecha, NEW.fecha, NEW.Alumno_idAlumno, 2, NEW.fecha);
SET var1 = var1 + 1;
END WHILE;

ELSEIF opcion2 = 2 THEN
SET var2 = 0;
WHILE var2 <> 5 DO
INSERT INTO recibo (Deuda_idDeuda, monto, fecha_emision, fecha_vencimiento, Deuda_Alumno_idAlumno, Estado_idEstado)
VALUES (NEW.idDeuda, NEW.monto, NEW.fecha, ADDDATE(NEW.fecha, INTERVAL var2 MONTH), NEW.Alumno_idAlumno, 1);
SET var2 = var2 + 1;
END WHILE;
SET maximo = (SELECT MAX(Deuda_idDeuda) FROM recibo);
UPDATE recibo
SET monto = monto/5
WHERE Deuda_idDeuda = maximo;

ELSEIF opcion3 = 3 THEN
SET var3 = 0;
WHILE var3 <> 6 DO
INSERT INTO recibo (Deuda_idDeuda, monto, fecha_emision, fecha_vencimiento, Deuda_Alumno_idAlumno, Estado_idEstado)
VALUES (NEW.idDeuda, NEW.monto, NEW.fecha, ADDDATE(NEW.fecha, INTERVAL var3 MONTH), NEW.Alumno_idAlumno, 1);
SET var3 = var3 + 1;
END WHILE;
SET maximo = (SELECT MAX(Deuda_idDeuda) FROM recibo);
UPDATE recibo
SET monto = monto/6
WHERE Deuda_idDeuda = maximo;

ELSEIF opcion4 = 4 THEN
SET var4 = 0;
WHILE var4 <> 10 DO
INSERT INTO recibo (Deuda_idDeuda, monto, fecha_emision, fecha_vencimiento, Deuda_Alumno_idAlumno, Estado_idEstado)
VALUES (NEW.idDeuda, NEW.monto, NEW.fecha, ADDDATE(NEW.fecha, INTERVAL var4 MONTH), NEW.Alumno_idAlumno, 1);
SET var4 = var4 + 1;
END WHILE;
SET maximo = (SELECT MAX(Deuda_idDeuda) FROM recibo);
UPDATE recibo
SET monto = monto/10
WHERE Deuda_idDeuda = maximo;

ELSEIF opcion5 = 5 THEN
SET var5 = 0;
WHILE var5 <> 12 DO
INSERT INTO recibo (Deuda_idDeuda, monto, fecha_emision, fecha_vencimiento, Deuda_Alumno_idAlumno, Estado_idEstado)
VALUES (NEW.idDeuda, NEW.monto, NEW.fecha, ADDDATE(NEW.fecha, INTERVAL var5 MONTH), NEW.Alumno_idAlumno, 1);
SET var5 = var5 + 1;
END WHILE;
SET maximo = (SELECT MAX(Deuda_idDeuda) FROM recibo);
UPDATE recibo
SET monto = monto/12
WHERE Deuda_idDeuda = maximo;

END IF;

END
$

DELIMITER ;

Este trigger se inicia al insertar un registro en una tabla llamada deuda, en la cual se coloca la fecha, un numero de documento, el monto, la forma de pago (esta pueden ser 5 (contado, 5 cheques, 6 cheques, 10 cheques y 12 cheques) y un comentario), segun la forma de pago, crea recibos, estos se guardan en una tabla llamada recibo.

El problema que tengo es cuando agrego una deuda con forma de pago 12 cheques, me genera 12 recibos sin problemas, luego agrego otra deuda con forma de pago 6 cheques, genera 6 cheques, pero si hago otra deuda con forma de pago 10 cheques, solo me genera 6 recibos.

El orden de las formas de pago es asi

- contado
- 5 cheques
- 6 cheques
- 10 cheques
- 12 cheques

El error pasa cuando quiero ocupar otra opcion, que este por debajo de la ultima, es como si no cerrara el trozo de codigo, ya no se que mas hacer, no se que se les ocurre XD
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