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 に答える