Ver Mensaje Individual
  #7 (permalink)  
Antiguo 12/05/2009, 13:32
turboaux
 
Fecha de Ingreso: mayo-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Respuesta: No funciona el COMMIT

Ok mira aqui esta el Store Bien Redactado

DROP PROCEDURE IF EXISTS `univalle`.`SP_ADD_CLIENT`;

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `univalle`.`SP_ADD_CLIENT`(IN nombre VARCHAR(50),IN apellido VARCHAR(50),IN correo VARCHAR(50))
BEGIN
DECLARE idUser INT;
DECLARE a INT;

SET AUTOCOMMIT=0;
START TRANSACTION;

INSERT INTO CLIENT (FIRSTNAME, LASTNAME, EMAIL) VALUES (nombre, apellido, correo);

SET idUser = LAST_INSERT_ID();

INSERT INTO STUDIO (ID_CL, NAME_ST)
VALUES (idUser, name_st);

INSERT INTO ME_EQUIVOCO (ID_CL, ID_PL, ADDED)
VALUES (idUser, 1, CURDATE());

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

END $$

DELIMITER ;

Pero sigue sin llegar al ROLLBACK, me llamo la atencion tu comentario sobre que la variable @@error_count no existe, probe tambien poniendo show count(*) ERRORS pero tampoco funciona. Tomando tu comentario como base probe haciendo lo siguiente:


DROP PROCEDURE IF EXISTS `univalle`.`SP_ADD_CLIENT`;

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_ADD_CLIENT`(nombre VARCHAR(50), apellisdo VARCHAR(50), email VARCHAR(50))
BEGIN
DECLARE idUser INT;
DECLARE a INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT 'Error occurred ? terminating';
END;

SET AUTOCOMMIT=0;
START TRANSACTION;

INSERT INTO CLIENT (FIRSTNAME, LASTNAME, EMAIL) VALUES (nombre,apellido, correo);

SET idUser = LAST_INSERT_ID();

INSERT INTO STUDIO (ID_CL, NAME_ST)
VALUES (idUser, name_st);

INSERT INTO ME_EQUIVOCO (ID_CL, ID_PL, ADDED)
VALUES (idUser, 1, CURDATE());

COMMIT;

END $$

DELIMITER ;

Ok el Stored Procedure se executa muy bien, Cuando hay Error se ejecuta el ROLLBACK y cuando no se ejecuta el COMMIT, pero me gustaria saber ahora como puedo manejar el mensaje de error de manera automatica, es decir, que me entregue ya sea el mensaje de error por defecto de ese error o el numero de error, para tratarlo posteriormente con PHP.