MySQL 定义 INNER JOIN 表时存储函数语法错误

MySQL Stored Function syntax error while defining INNER JOIN tables

我的Sql代码是这样的:

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 中执行此代码时出现此错误:未定义变量:a

但是当我执行这段代码时:

 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';

没有问题,完全可以正常工作。

我的代码有什么问题?有什么想法吗?

您使用的语法错误。 正确的语法是:

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

注意一点:不要将与 table 中的列相同的名称分配给变量,例如:DECLARE name,dirname,如果您想稍后使用它们,它会导致混淆和错误在查询中。为变量使用前缀,例如:DECLARE v_name,v_dirname