首页 文章

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

提问于
浏览
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)

请指导我这里的朋友解决问题谢谢!

1 回答

  • 0

    我找到了第一个问题的原因和答案 . 没有获得预期输出的原因是我使用用户定义变量名'id'作为SP的传入参数 . 此变量名称“id”类似于我提到的表的列名 . 所以MySql将这个'id'视为局部变量,而不是表列 . 冲突就在这里 . 如果将传入的参数变量名称更改为SP,则不会与查询中提到的表中的列名冲突 . 您将获得所需的输出 .

    谢谢!

相关问题