如何在MySQL中使用一个输入变量声明存储过程?

时间:2017-02-16 23:14:57

标签: mysql stored-procedures

我有这个表(名为Sandbox):

+----+-----------+---------+
| ID | statecode | country |
+----+-----------+---------+
|  1 | ITA       | Italy   |
|  2 | ESP       | Spain   |
|  3 | GER       | Germany |
|  4 | ESP       | Espana  |
+----+-----------+---------+

我正在尝试创建一个存储过程,它从一个参数(状态代码)中提供所有国家/地区名称。

例如

CALL GetCountryNameFromCode('ITA'); 

应该返回"意大利"

CALL GetCountryNameFromCode('ESP'); 

应该返回"西班牙","西班牙"

关注this guide我写了以下代码:

DELIMITER //
CREATE PROCEDURE GetCountryNameFromCode (IN MyStateCode varchar(3))
BEGIN
    SELECT country
    FROM Sandbox
    WHERE statecode = MyStateCode
END; //
DELIMITER ;

但是当我执行它时,phpMyAdmin给了我以下错误:

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' END'在第6行

我的代码出了什么问题? 我正在运行MySQL版本5.6.30 - 源代码分发(MacOS上的AMPPS)

==============================编辑================ ==============

现在我正在运行这个:

DELIMITER //
CREATE PROCEDURE GetCountryNameFromCode (IN MyStateCode varchar(3))
BEGIN
    SELECT country
    FROM Sandbox
    WHERE statecode = MyStateCode;
END //
DELIMITER ;

这给了我以下错误:

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' DELIMITER'在第1行

尽管出现了错误消息,但SP已经创建并且运行正常。

3 个答案:

答案 0 :(得分:1)

你需要在select语句结束后加一个分号来表示语句的结束,并且需要在this.game.world.setBounds(0, 0, this.game.width, this.game.height); 关键字之后删除分号,因为end终止了存储的proc'代码。

有关详细信息,请参阅defining stored procedures上的mysql手册。

答案 1 :(得分:1)

首先,表中的列是" county"不是"国家"。 其次,你需要放一个;在你的where子句之后:

WHERE statecode = MyStateCode;

答案 2 :(得分:1)

试试这个:

DELIMITER $$

    DROP PROCEDURE IF EXISTS `GetCountryNameFromCode` $$
        CREATE PROCEDURE `GetCountryNameFromCode`(IN MyStateCode varchar(3))
        BEGIN

       SELECT country
       FROM Sandbox
       WHERE statecode = MyStateCode;

        END $$

    DELIMITER ;