2017-02-16 12 views
1

У меня есть эта таблица (с именем Sandbox):Как объявить хранимую процедуру с помощью одной входной переменной в MySQL?

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

Я пытаюсь создать хранимую процедуру, которая дает мне все названия стран от одного параметра (statecode).

Например

CALL GetCountryNameFromCode('ITA'); 

должен вернуть "Италии"

CALL GetCountryNameFromCode('ESP'); 

должен вернуть "Испания", "Espana"

После 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 - Распределение источников (AMPPS на MacOS)

================================================================================================================================================================= == EDIT ==============================

Сейчас я бегу это:

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

Вам нужно иметь точку с запятой после окончания операции выбора, чтобы указать конец оператора, и нужно удалить точку с запятой после ключевого слова end, потому что // завершает сохраненный код proc.

Подробнее см. В руководстве пользователя mysql на defining stored procedures.

+0

Я изменил код со всеми вашими ответами и теперь он работает. Странным фактом является то, что он все еще дает мне сообщение об ошибке, когда я запускаю код для его создания. Я отправляю код, который я использовал для создания SP в первом вопросе. – Nicolaesse

1

Сначала столбец в вашем столе «графство» не «страна». Во-вторых, вам нужно поставить a; после ИНЕКЕ:

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 ;