mysql - 在 MySQL 事务中执行

标签 mysql stored-procedures transactions

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

最佳答案

据我所知,您需要在 execute ...using 中使用 session 用户变量:

...
PREPARE stmt FROM @SQL;
SET @tmp_var = goodID;
EXECUTE stmt USING @tmp_var;
...

关于mysql - 在 MySQL 事务中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207923/

相关文章:

php - LIMIT 并不总是返回相同的行数

mysql - 如何在Mysql存储过程中动态选择表

SQL Server WITH 语句

MySQL 事务返回错误

java - Java 中的并行和事务处理 (Java EE)

jquery - 如何在不重新加载页面的情况下进行多个帖子(html,mysql)

php - 我有一个 SQL 表。对于 PHP 的 SQL 请求,我想将该请求的结果存储在变量中。

php - 错误#2007,在AS3中,但它跟踪正确的结果,当添加var文本字段时,它在动态文本框中显示Null

c# - 返回复杂类型列表中的存储过程结果

php - MySQL PHP插入两个表事务