在MySql中,如何准备和执行创建过程

时间:2017-03-27 13:44:49

标签: mysql stored-procedures execute prepare

我正在尝试通过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

有人可以告诉我我做错了什么吗?我已经尝试过排除故障,但我还没想到它。

1 个答案:

答案 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