2017-02-16 76 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 ; 
相關問題