2017-02-16 75 views
1

我有这个表(名为沙盒):如何在MySQL中用一个输入变量声明存储过程?

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

我试图创建一个存储过程,它使我从一个参数(statecode)所有的国名。

例如

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 - 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 'END' at line 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 - 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' at line 1

尽管错误消息SP已创建并完美工作。

回答

1

您需要在select语句结束后有一个分号来指示语句结束,并且需要删除end关键字后面的分号,因为//终止存储的proc代码。

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

+0

我修改了所有的答案代码,现在它的工作原理。奇怪的事实是,当我执行代码来创建它时,它仍然给我一个错误消息。我在第一个问题中发布了用于创建SP的代码。 – Nicolaesse

1

首先表中的列是“县”而不是“国家”。 二,你需要放一个;你的where子句后:

WHERE statecode = MyStateCode; 
1

试试这个:

DELIMITER $$ 

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

     SELECT country 
     FROM Sandbox 
     WHERE statecode = MyStateCode; 

     END $$ 

    DELIMITER ; 
相关问题