1

我正在与 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;

如果我删除事务和处理程序,代码一切正常。如果我删除该EXECUTE语句,则可以创建该过程。

我在这里想念什么?

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$$
4

1 回答 1

1

据我记得,您需要在以下位置使用会话用户变量execute ...using

...
PREPARE stmt FROM @SQL;
SET @tmp_var = goodID;
EXECUTE stmt USING @tmp_var;
...
于 2013-01-08T03:56:53.457 回答