【问题标题】:EXECUTE in MySQL Transaction在 MySQL 事务中执行
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多