次のテーブル構造があります
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)
問題を解決するために、これで友達を案内してください ありがとう!