输入 MYSQL 存储过程的正确方法是什么?

What is the proper way to enter a MYSQL stored procedure?

我阅读了文档,似乎为了有一个存储过程我必须输入一些命令如下:

DELIMITER //

CREATE PROCEDURE
myDB.RoutingName                        /* Routine name */
(IN parameter_1_id INTEGER)                 /* Parameter list */

BEGIN                                           /* Routine body */
SELECT * FROM mytable WHERE id = parameter_1_id 
END;

DELIMITER ;

我试图将以上行输入到文件中,然后 copy/paste 将它们输入到 phpmyadmin SQL 部分以将其输入 MYSQL 服务器,但我收到语法错误。

我想知道进入存储过程的正确方法是什么?特别是当它们很大并且包含很多行时?

你需要一个;查询之后和 END 之后的分隔符应该是您首先指定的分隔符。

DELIMITER //

CREATE PROCEDURE
myDB.RoutingName                        /* Routine name */
(IN parameter_1_id INTEGER)                 /* Parameter list */

BEGIN                                           /* Routine body */
SELECT * FROM mytable WHERE id = parameter_1_id;
END//
DELIMITER ;

好的,我真的找到了答案。

输入存储过程的最佳方式是将其保存到如下文件中:

myprocedure.sql

然后将 SQL 语句保存为:

DELIMITER //

CREATE PROCEDURE
myDB.RoutingName                            /* Routine name */
(IN parameter_1_id INTEGER)                 /* Parameter list */

BEGIN                                             /* Routine body */
SELECT * FROM mytable WHERE id = parameter_1_id;  /* first statement */ 
SELECT * FROM mytable WHERE id = parameter_1_id;  /* second statement */
       /* Loops and other statement go here, each separated by a ; */
END//
DELIMITER ;

然后转到命令行并发出:

$ mysql -u username -p < myprocedure.sql

输入您的密码,现在您的程序已保存。 从现在开始,您可以通过在 MYSQL 客户端 shell 提示符下发出 CALL 命令来调用该过程。