为什么存储过程不以一个字符串给出输出,而在MySql 6.0上执行的存储过程在MySql 5.0上给出错误

为什么存储过程不以一个字符串给出输出,而在MySql 6.0上执行的存储过程在MySql 5.0上给出错误,mysql,stored-procedures,plsql,Mysql,Stored Procedures,Plsql,我有以下表格结构 id | Name | senior id 1 | superadmin | -1 2 | abc | 1 3 | xyz | 1 4 | pqr | 2 5 | vwx | 3 6 | stu | 3 7 | efg

我有以下表格结构

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关联的名称到其前辈id为-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,我使用SQLYG在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,则将不会与查询中提到的表中的列名冲突。您将获得所需的输出


谢谢大家!

MySQL的最新版本是5.6。请仔细检查您的软件版本并编辑您的问题。@OllieJones谢谢您的回答,先生,我确信MySql软件版本是6.0.11。我已经从这个URL下载了它。我已经下载了Microsoft Windows安装程序。