我正在尝试通过Prepare / Execute语句创建MySql存储过程,但是我收到错误。我不明白我正在破坏什么语法。
SET @SourceDBName='dev';
SET @alterstatement=CONCAT('DELIMITER //
CREATE PROCEDURE ',@SourceDBName,'.execute_statement (alterstatement VARCHAR (767))
BEGIN
SELECT @alterstatement;
PREPARE executionstatement FROM @alterstatement;
EXECUTE executionstatement;
END //');
SELECT @alterstatement;
PREPARE executionstatement FROM @alterstatement;
EXECUTE executionstatement;
我收到一般语法错误:
09:43:20 PREPARE executionstatement FROM @alterstatement 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 'DELIMITER // CREATE PROCEDURE dev.execute_statement (alterstatement VARC' at line 1 0.086 sec
有人可以告诉我我做错了什么吗?我已经尝试过排除故障,但我还没想到它。
答案 0 :(得分:1)
DELIMITER
是官方command-line utility的命令。你不能在别的地方使用它。
在你的情况下,你无论如何都不需要它。 PREPARE
statement不接受多个陈述:
文本必须代表单个陈述,而不是多个陈述。
...所以不需要分隔符。但是,您会收到此错误:
准备好的语句协议
中不支持此命令
...因为CREATE PROCEDURE
显然是not supported yet:
以下SQL语句可用作预准备语句:
[...]
{CREATE | DROP} INDEX {CREATE | RENAME | DROP} DATABASE {CREATE | DROP} TABLE {CREATE | RENAME | DROP} USER {CREATE | DROP} VIEW