以下の MYSQL のストアド プロシージャでは、データの切り捨てによる警告が発生するたびに、警告が表示されます。しかし、ROLLBACK は何もしません。WARNING の EXIT ハンドラは完全に無視されています。助けてください。
DELIMITER $$
DROP PROCEDURE IF EXISTS `saveDetails` $$
CREATE DEFINER=`dbuser`@`%` PROCEDURE `saveDetails`(IN param_name VARCHAR(200))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
START TRANSACTION;
UPDATE userDetails SET displaystatus = 2 where displaystatus = 1;
UPDATE userDetails SET displaystatus = 1 where displaystatus = 0;
UPDATE userDetails SET name = param_name;
COMMIT;
END $$
DELIMITER ;
以下のバージョンも試しましたが、これも機能しません。
区切り記号 $$
DROP PROCEDURE IF EXISTS `saveDetails` $$
CREATE DEFINER=`dbuser`@`%` PROCEDURE `saveDetails`(IN param_name VARCHAR(200))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END;
START TRANSACTION;
UPDATE userDetails SET displaystatus = 2 where displaystatus = 1;
UPDATE userDetails SET displaystatus = 1 where displaystatus = 0;
UPDATE userDetails SET name = param_name;
COMMIT;
END $$
DELIMITER ;