Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Не корректно работает процедура. В чем ошибка (Aco) 30/04/2008 - 10:06:39
      Re: Не корректно работает процедура. В чем ошибка (Вадим) 04/05/2008 - 19:44:37

> Original message text:
> From: Aco - 30/04/2008 - 10:06:39
> Subject:Не корректно работает процедура. В чем ошибка
> -----------------
>
>
> Доброго времени суток!
> Есть иерархиескаия таблица:
> Код:
>
> CREATE TABLE `tree` (
> `item_id` int(11) unsigned NOT NULL auto_increment,
> `parent_id` int(11) default NULL,
> `descr` varchar(64) default NULL,
> `some_data` tinytext,
> PRIMARY KEY (`item_id`)
> ) ENGINE=MyISAM
>
> Заполненая следующим образом
> Код:
>
> INSERT INTO `tree` (`item_id`,`parent_id`,`descr`,`some_data`) VALUES
> (1,'0','root','The start'),
> (2,'1','level 1','2'),
> (3,'1','level 1','3'),
> (4,'3','level 2','4'),
> (5,'4','level 3','5'),
> (6,'2','level 2','6'),
> (7,'3','level 2','7'),
> (8,'2','level 2','8'),
> (9,'8','level 3','9'),
> (10,'1','level 1','10'),
> (11,'10','level 2','11'),
> (12,'6','level 3','12'),
> (13,'11','level 3','13'),
> (14,'4','level 3','14'),
> (15,'7','level 3','15'),
> (16,'12','appendix','The end');
>
> Есть следующая процедура. В неё передаётся item_id любого элемента и она выбирает клиенту все элементы от этого item_id до root.
> Код:
>
> DELIMITER $$
> DROP PROCEDURE IF EXISTS `fromItemToRoot` $$
> CREATE PROCEDURE `fromItemToRoot` (IN _item_id INT)
> BEGIN
> WHILE _item_id > 0 DO
> SELECT * FROM `tree` WHERE `item_id` = _item_id;
> SELECT parent_id INTO _item_id FROM `tree` WHERE `item_id` = _item_id;
> #SELECT _item_id;
> END WHILE;
> END $$
> DELIMITER ;
>
> Проблема в том что, передавая, например, _item_id = 16, WHILE делает только одну итерацию, хотя по окончанию первой итерации _item_id = 12. Почему так? Как заставить его делать все итерации?
>
>


From: Вадим - 04/05/2008 - 19:44:37
Subject:Не корректно работает процедура. В чем ошибка
-----------------
процедура по определению не возвращает значения, поэтому слова ".. и она выбирает клиенту все элементы от этого item_id до root" не очень понятны: как это она выбирает? как возвращает?

по коду - я бы таки не писал в переменную, обьявленную как "входная" (IN _item_id INT), какие-либо значения. как минимум INOUT _item_id INT, как максимум - обьявил бы специальную переменную цикла :)




[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
33513



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |