繁体   English   中英

为什么存储过程没有在一个字符串中给出输出,而在MySql 6.0上执行的存储过程却在MySql 5.0上给出了错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM