MySQL 创建存储过程

Posted

技术标签:

【中文标题】MySQL 创建存储过程【英文标题】:MySQL Create Stored Procedures 【发布时间】:2017-10-14 18:34:24 【问题描述】:

这个问题可能被标记为重复,但我真的需要帮助。

我已经经历了很多关于这个的答案,并实施了解决方案,但似乎没有任何效果。

创建存储过程时:

DELIMITER ##
DROP PROCEDURE IF EXISTS sp_AddCity##
CREATE PROCEDURE 'sp_AddCity'(IN aCityName VARCHAR(50))
BEGIN
INSERT INTO City(CityName)
VALUES (aCityName);
END##
DELIMITER ;

我总是收到错误 #1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 2 行的 'CREATE PROCEDURE 'sp_AddCity'(IN aCityName VARCHAR(50)) BEGIN INSERT INTO City' 附近使用正确的语法。

知道我的语法或任何错误在哪里吗?由于我是 MySQL 新手,所以一直在苦苦挣扎。

我正在使用 MySQL 服务器并尝试在 phpMyAdmin 中使用 SQL 创建过程。

谢谢

【问题讨论】:

去掉单引号。仅对字符串和日期常量使用单引号。 @GordonLinoff 我刚刚尝试过,但仍然给我同样的错误信息。 如果您先尝试不使用 DROP 行会怎样? @JacobH 成功了。有没有其他方法可以实现 DROP 行?我创建了一个小型 C# Winforms 应用程序来将我的 SQL Server 过程转换为 MySQL 服务器过程。它现在可以工作,但如果它已经存在,现在可能会弹出错误? sp_AddCity ## 后是否需要一个空格和分隔符?这条线显然有问题。 【参考方案1】:

从 MySQL-CLI 存储过程按预期创建:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.18    |
+-----------+
1 row in set (0.00 sec)

mysql> DELIMITER ##

mysql> DROP PROCEDURE IF EXISTS `sp_AddCity`##
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE PROCEDURE `sp_AddCity`(IN `aCityName` VARCHAR(50))
    -> BEGIN
    ->   INSERT INTO `City`(`CityName`)
    ->   VALUES (`aCityName`);
    -> END##
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `sp_AddCity`('CityName');
ERROR 1146 (42S02): Table '_.City' doesn't exist

在 phpMyAdmin 中,您必须设置 DELIMITER,如图所示:

【讨论】:

以上是关于MySQL 创建存储过程的主要内容,如果未能解决你的问题,请参考以下文章

mysql中怎么创建存储过程?

MySQL之存储过程创建和调用

mysql 存储过程

MySQL创建存储过程

mysql在存储过程中用当前时间作为表名创建表

MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别