Возможности хранимых процедур.

Hektor

Есть table1Необходимо в храмой процедуре/функции реализовать следующее:1) выводить значение поля (a) в список
  • ______
до того момента, пока значение поля (b) != (c)2) Выполнить определенную операцию, после чего3) Продолжить вывод списка.Возможно ли это вообще?
9 ответов

Hektor

Возможно!


Hektor

Как это реализовать.Дайте хотя бы наводку/пример.


Hektor

а что, эту операцию обязательно производить в середине вывода списка?


Hektor

да


Hektor

а что, эту операцию обязательно производить в середине вывода списка?
а зачем, если не секрет?просто из сохраненной процедуры вы все равно можете выдать ответ клиенту только целикомнепонятно, зачем делать какие-то действия во время создания этого ответа, сделайте до или после - тогда ответ можно будет выдать одним запросом, а не через несколько или с помощью курсора


Hektor

В итоге я должен получить список вида:
  • a
  • b
  • с
  • d
  • e
  • f Где d и e - это потомки с.Все элементы находятся в одной таблице.

  • Hektor

    так у вас там в таблице что-то типа дерева хранится? с этого и надо было начинатьструктуру таблицы, исходные данные и что надо получить в итоге - в студию


    Hektor

    CREATE TABLE `objects` ( 
     `ID` int(<b>6</b>) NOT NULL AUTO_INCREMENT, 
     `printable_ID` varchar(<b>250</b>) NOT NULL DEFAULT '', 
     `type` int(<b>6</b>) NOT NULL DEFAULT '0', 
     `is_group` int(<b>1</b>) NOT NULL DEFAULT '0', 
     `parent` int(<b>6</b>) NOT NULL DEFAULT '0', 
     `order` int(<b>3</b>) NOT NULL DEFAULT '999', 
     `title` varchar(<b>250</b>) NOT NULL DEFAULT '', 
     `keywords` varchar(<b>250</b>) NOT NULL DEFAULT '', 
     `annotation` text NOT NULL, 
     PRIMARY KEY (`ID`), 
     KEY `printable_ID` (`printable_ID`), 
     KEY `is_group` (`is_group`), 
     KEY `parent` (`parent`), 
     KEY `ID` (`type`,`order`), 
     KEY `title` (`title`) 
     ) ENGINE=MyISAM AUTO_INCREMENT=<b>52613</b> DEFAULT CHARSET=cp1251
    1. Выводим title пока ID <> переменной WHERE parent <> ID2. Выводим title где parent = ID3. Продолжаем п.1 до конца.


    Hektor

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `power2`$$
    
    CREATE PROCEDURE `power2`(IN par INT(<b>6</b>), OUT li TEXT(<b>10000</b>))
    BEGIN
    	DECLARE incr INT DEFAULT <b>0</b>;
    	DECLARE str TEXT(<b>10000</b>) DEFAULT '';
    	DECLARE tit VARCHAR(<b>250</b>) DEFAULT '';
    	DECLARE ids INT DEFAULT <b>0</b>;
    	DECLARE pars INT DEFAULT <b>0</b>;
    	
    	WHILE incr < <b>10</b> DO
    		SET incr=incr+<b>1</b>;
    		PREPARE stmt FROM '
    		ORDER BY o2.title, o.title LIMIT ?, 1';
    		SET @s=incr;
    		EXECUTE stmt USING @s;
    		/*IF ids = pars THEN
    			SET incr = 11;
    		END IF;*/
    		
    		SET str = CONCAT (str, "<li>",@pid, "</li>");
    		
    	END WHILE;
    		
    	SET li = str;
    	
     END$$
    
    DELIMITER ;