2015-07-10 37 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 

一个备注:不分配给变量表中与列相同的名称具有fo例如:DECLARE name,dirname,如果您想在查询中稍后使用它,会导致混淆和错误。使用变量前缀,例如:DECLARE v_name,v_dirname