Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/03/2008, 17:09
Punchi
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años
Puntos: 1
Re: Problema con SP (Stored Procedure)

Novedades!

Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `rania`.`SP_ADD_STUDENT` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_ADD_STUDENT`(firstname VARCHAR(50), lastname VARCHAR(50), email VARCHAR(50), address VARCHAR(50), city VARCHAR(50), state VARCHAR(50), zip VARCHAR(50), phone VARCHAR(50), altphone VARCHAR(50), paydate DATE, advtype VARCHAR(50), id_mpay INT, amount INT, date DATE, id_tmember INT, start_date DATE, end_date DATE, id_tlesson INT, purchased INT, remaining INT)
BEGIN
DECLARE idUser INT;
DECLARE a INT;

INSERT INTO user (FIRSTNAME, LASTNAME, EMAIL, ADDRESS, CITY, STATE, ZIP, PHONE, ALTPHONE, CREATED)
	VALUES (firstname, lastname, email, address, city, state, zip, phone, altphone, CURDATE() );

SET idUser = LAST_INSERT_ID();

INSERT INTO student (ID_USER, PAYDATE, ADVTYPE, ACTIVEINACTIVE)
	VALUES (idUser, paydate, advtype, 1);
INSERT INTO student_mpayment (ID_USER, ID_MPAY, AMOUNT, DATE)
	VALUES (idUser, id_mpay, amount, date);
INSERT INTO student_tmembership (ID_USER, ID_TMEMBER, START_DATE, END_DATE)
	VALUES (idUser,id_tmember,start_date,end_date);
INSERT INTO student_tlesson (ID_USER, ID_TLESSON, PURCHASED, REMAINING)
	VALUES (idUser, id_tlesson, purchased, remaining);

SET a=(SELECT @@error_count);
IF a=0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;

END $$

DELIMITER ;
Puedo ejecutar perfectamente el SP con esta llamada

Código:
CALL SP_ADD_STUDENT("minombre", "apellido", "[email protected]", "porahi", "santiago", "aasdads", "123456", "12456", "12313132", "2002-01-01", "loalzo", 1, 123, "2004-05-03", 1, "2008-03-01", "2008-05-01", 1, 4, 5)
;
El problema? NO toma ni el COMMIT ni el ROLLBACK

Existe la asociacion llamada "student_mpayment" por ejemplo, que relaciona "student" con "method_payment". El problema es que estoy señalandole a la asociacion que me relacione "id_mpay = 1" de "method_payment" y claramente esta ultima entidad no posee datos y me arroja el error de integridad.

Como anteriormente expuse, el problema es que no hace el ROLLBACK y en la base de datos graba de todas manera informacion en "user" y en "student"

Que estoy haciendo mal???