我有以下表格结构
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)
请指导我这里的朋友解决问题谢谢!
1 回答
我找到了第一个问题的原因和答案 . 没有获得预期输出的原因是我使用用户定义变量名'id'作为SP的传入参数 . 此变量名称“id”类似于我提到的表的列名 . 所以MySql将这个'id'视为局部变量,而不是表列 . 冲突就在这里 . 如果将传入的参数变量名称更改为SP,则不会与查询中提到的表中的列名冲突 . 您将获得所需的输出 .
谢谢!