使用预准备语句时出现Mysql语法错误

时间:2017-12-15 08:06:10

标签: mysql

我正在创建一个存储过程,它将执行一个准备好的语句但是在创建过程中我得到了mysql语法错误:

  

MySQL说:#1064 - 你的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'PREPARE udpatestatut FROM @req附近使用的语法;执行   updatestatut;在第4行DEALLOCATE PREPARE upd'

我不知道我的错误是什么,所以我需要帮助来理解我做错了什么或写错了。这是我正在执行的指令。

CREATE PROCEDURE changestatut(IN pstatut VARCHAR(10),IN pidpost VARCHAR(255))

COMMENT 'This procedure change the statut of activities.' NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 

SET @req := concat('UPDATE compte set statut=\'', pstatut ,'\' where idpost in (', pidpost ,')'); 

PREPARE udpatestatut FROM @req; EXECUTE updatestatut; DEALLOCATE PREPARE updatestatut;

idpost参数是逗号分隔值...例如:1,2,3,6

1 个答案:

答案 0 :(得分:0)

如果你的程序中有多个语句,你需要将它们包装在begin..end中,你可能也没有设置分隔符。试试这个

DROP PROCEDURE IF EXISTS changestatut;
DELIMITER $$
CREATE PROCEDURE changestatut(IN pstatut VARCHAR(10), IN pidpost VARCHAR(255))

COMMENT 'This procedure change the statut of activities.' NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 
BEGIN
SET @req := concat('UPDATE compte set statut=\'', pstatut ,'\' where idpost in (', pidpost ,')'); 

PREPARE udpatestatut FROM @req; EXECUTE updatestatut; 

DEALLOCATE PREPARE updatestatut;
END $$

DELIMITER ;