[英]Why stored procedure is not giving output in one string and the stored procedure executed on MySql 6.0 gives error on MySql 5.0
我有以下表格结构
id | Name | senior id
1 | superadmin | -1
2 | abc | 1
3 | xyz | 1
4 | pqr | 2
5 | vwx | 3
6 | stu | 3
7 | efg | 4
8 | ijk | 3
9 | nop | 3
10 | rst | 3
11 | uvw | 9
在这里,我编写了一个存储过程,该过程使用id作为输入,并将返回一个字符串,该字符串由与id关联的名称到seniorid为-1的名称之间以'/'分隔的连贯名称组成。
例如,如果我将id作为10传递给SP,我期望返回字符串为rst/xyz/superadmin/
这是我写的存储过程
DELIMITER $$;
DROP PROCEDURE IF EXISTS `mydb`.`get_list_up_to_senior`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_list_up_to_senior`(id int (8))
BEGIN
DECLARE strsenior VARCHAR(250);
DECLARE strseniorlist VARCHAR(250);
DECLARE temp int(8);
SET strsenior = '';
SET strseniorlist = '';
SET temp = id;
WHILE temp != -1 DO
SET strsenior = (SELECT name FROM mydb.tblname WHERE id = temp limit 1);
SET temp = (SELECT seniorid FROM mydb.tblname WHERE id = temp limit 1);
SET strseniorlist = CONCAT(strseniorlist,strsenior,'/');
END WHILE;
SELECT strseniorlist;
END$$
DELIMITER ;$$
编译此SP时,我得到的编译没有错误。 但是当我执行这个SP时; 它得到完美执行并返回
strseniorlist
superadmin/
1)我的SP出了什么问题,所以我没有得到想要的输出。
我的数据库版本是MySQL 6.0,我正在使用Sqlyog在SP之上执行。
2)当我在MySql 5.0上执行上述SP时,它没有被创建并给出以下错误
ERROR :
(0 row(s) affected)
(0 ms taken)
Error Code : 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 'PROCEDURE `get_list_up_to_senior`(id int (8))
BEGIN
DECLARE strsenior VA' at line 1
(16 ms taken)
请各位朋友在此指导我解决问题,谢谢!
我找到了原因并回答了我的第一个问题。 无法获得预期输出的原因是,我已使用用户定义变量名“ id”作为SP的传入参数。 这个变量名“ id”类似于我提到的表的列名。 因此,MySql正在考虑将此“ id”作为局部变量而不是表列。 冲突在这里。 如果将传入的参数变量名称更改为SP,则不会与查询中提到的表中的列名称冲突。 您将获得所需的输出。
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.