2012-07-19 169 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