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 创建存储过程的主要内容,如果未能解决你的问题,请参考以下文章