2013-01-08 17 views
1

我正在與MySQL存儲過程和PREPARE/EXECUTE語句對摔跤。我試圖運行下面的(簡化)代碼來創建一個存儲過程,它將幾個查詢封裝到一個事務中並進行回滾。我繼續得到MySQL事務中的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$$ 

回答

1

至於我記得,你需要使用會話用戶變量execute ...using

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

這是它 - 感謝! – ellswrth