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