【发布时间】:2012-12-21 21:20:15
【问题描述】:
我正在与 MySQL 存储过程和 PREPARE / EXECUTE 语句对搏斗。我正在尝试运行下面的(简化的)代码,以创建一个存储过程,将多个查询封装到一个事务中并进行回滚。我继续得到
Error Code: 1064
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax
to use near 'goodID;
如果我删除事务和处理程序,代码一切正常。如果我删除EXECUTEstatement,则可以创建过程。
我在这里错过了什么?
DELIMITER $$
USE `casc`$$
DROP PROCEDURE IF EXISTS `sp_T_MergeMemberIDs`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_T_MergeMemberIDs`(IN goodID VARCHAR(8), OUT param_sp_success TINYINT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
START TRANSACTION;
SET param_sp_success = 0;
SET @SQL=
"SELECT * FROM member
WHERE memberID = ?";
PREPARE stmt FROM @SQL;
EXECUTE stmt USING goodID;
-- queries executed here using the same parameter
-- omitted for simplicity
SET param_sp_success = 1;
COMMIT;
END$$
【问题讨论】:
标签: mysql stored-procedures transactions