2015-07-10 2 views
0

Моего Sql кода выглядит так:MySQL Хранимых функции синтаксические ошибки при определении INNER JOIN таблицы

DELIMITER $$ 

CREATE FUNCTION `get_theme`(`section_type` VARCHAR(50)) 
RETURNS VARCHAR(50) 
CONTAINS SQL 
SQL SECURITY DEFINER 

BEGIN 

DECLARE name,dirname VARCHAR(50) ; 
SELECT a.name INTO name , a.dirname INTO dirname FROM themes as a 
INNER JOIN sections as b ON 
a.section_id = b.id 
WHERE b.name = 'administrators' AND a.`status` = 'Y'; 

RETURN name + '#' + dirname; 
END $$ 

DELIMITER ; 

, когда я выполняю этот код в HeidiSQL 9.2.0.4961 я получаю эту ошибку: Не определен переменный: а

но когда я выполнить этот код:

SELECT a.name as name , a.dirname as dirname FROM themes as a 
INNER JOIN sections as b ON 
a.section_id = b.id 
WHERE b.name = 'administrators' AND a.`status` = 'Y'; 

не существует никаких проблем, и она работает совершенно нормально.

что случилось с моим кодом? Есть идеи ?

ответ

1

Синтаксис, который вы используете, неверен. Правильный синтаксис:

SELECT list_of_expressions INTO list_of_variables FROM ... 


Заменить этот фрагмент:

SELECT a.name INTO name , a.dirname INTO dirname FROM themes as a 

с этим:

SELECT a.name, a.dirname INTO name , dirname FROM themes as a 

одно замечание: не следует назначать переменным те же имена, что и столбец в таблице, имеют Пример: DECLARE name,dirname, это вызывает путаницу и ошибки, если вы хотите использовать их позже в запросе. Используйте префикс для переменных, например: DECLARE v_name,v_dirname