2012-07-19 85 views
1

我是一般的MySQL和數據庫的新手。我正在嘗試創建一個MySQL存儲過程,但一直得到一個模糊的語法錯誤: 「你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'sps; EXECUTE附近使用正確的語法stmt USING nn,ee,ll,cc,uu; COMMIT END'在第11行「MySQL存儲過程中的EXECUTE給出語法錯誤

如果我刪除行」PREPARE stmt ...「,則創建存儲過程。當我放回線路時,再次出現錯誤。

這是什麼,我做錯了?

DELIMITER // 
CREATE PROCEDURE `account_create` (nn VARCHAR(25), 
            ee BIGINT, 
            ll BIGINT, 
            cc VARCHAR(100), 
            uu VARCHAR(25)) 
    BEGIN 
     DECLARE newId BIGINT; 
     DECLARE sps VARCHAR(50); 
     START TRANSACTION; 
     set sps = 'INSERT INTO account SET name=?, entity=?, ledger=?, tblname=tmpXXX, creation_date=CURDATE(), comment=?, uname=?'; 
     PREPARE stmt FROM sps; 


     COMMIT; 
    END// 

回答

1

您必須使用User Defined Variable執行準備好的語句。重寫爲:

... 
BEGIN 
    DECLARE newId BIGINT; 

    START TRANSACTION; 
    set @sps = 'INSERT INTO account SET name=?, entity=?, ledger=?, tblname=tmpXXX, creation_date=CURDATE(), comment=?, uname=?'; 
    PREPARE stmt FROM @sps; 


    COMMIT; 
END// 
+0

謝謝,我這樣做,它的工作。 MySQL文檔從未澄清'varName'和'@varName'之間的區別,我從之前的一個stackoverflow問題看到,'@'變量具有會話範圍,而非'@'變量具有過程範圍。如果我的理解是正確的,那麼上面的非'@'版本也不行? – Lelanthran 2012-07-19 06:41:06

+0

它不應該工作,很簡單,因爲您需要使用會話變量而不是局部變量。 – 2012-07-19 06:54:53