Rammstein
PHPClub::News
Хранимые функции и процедуры. Возврат нескольких записей.
Подскажите как описать (и возможно ли это), чтобы функция или процедура передавала обратно Resoult set?
Т.е. типа:
RETURN SELECT * FROM blabla LIMIT 4;
Мне даже возвращения одной записи хватило бы.
P.S> Не имеет значения что в результате получится - процедура или функция.
-~{}~ 25.03.06 22:32:
Ладно, тогда кто-нибудь объяснит почему при вызове процедуры:
CREATE PROCEDURE getLastinPath ( IN n_path VARCHAR(255) )
BEGIN
SET @c_path = '/';
SET @c_node = 0;
SET @c_node_left = 0;
SET @c_node_right = 0;
SELECT tree.left, tree.right INTO
@c_node_left, @c_node_right FROM tree WHERE id=1;
SELECT LOCATE('/', n_path, 2) INTO @prev_slash;
WHILE @c_path <> n_path DO
SELECT SUBSTRING(n_path, @prev_slash -1, LOCATE ('/', n_path, @prev_slash+1) - (@prev_slash+1)) INTO @next_name;
SELECT LOCATE ('/', n_path, @prev_slash+1) - (@prev_slash+1) INTO @prev_slash;
SELECT N1.id, N1.left, N1.right INTO @c_node, @c_node_left, @c_node_right
FROM tree AS N1, tree AS N2 WHERE N2.left BETWEEN N1.right AND N1.left
AND N2.right BETWEEN N1.right AND N1.left;
SET @c_path = CONCAT(@c_path, @next_name, '/');
END WHILE;
SELECT @c_node;
END;
Вылетает:
FUNCTION test.SUBSTRING does not exist
Подскажите как описать (и возможно ли это), чтобы функция или процедура передавала обратно Resoult set?
Т.е. типа:
RETURN SELECT * FROM blabla LIMIT 4;
Мне даже возвращения одной записи хватило бы.
P.S> Не имеет значения что в результате получится - процедура или функция.
-~{}~ 25.03.06 22:32:
Ладно, тогда кто-нибудь объяснит почему при вызове процедуры:
CREATE PROCEDURE getLastinPath ( IN n_path VARCHAR(255) )
BEGIN
SET @c_path = '/';
SET @c_node = 0;
SET @c_node_left = 0;
SET @c_node_right = 0;
SELECT tree.left, tree.right INTO
@c_node_left, @c_node_right FROM tree WHERE id=1;
SELECT LOCATE('/', n_path, 2) INTO @prev_slash;
WHILE @c_path <> n_path DO
SELECT SUBSTRING(n_path, @prev_slash -1, LOCATE ('/', n_path, @prev_slash+1) - (@prev_slash+1)) INTO @next_name;
SELECT LOCATE ('/', n_path, @prev_slash+1) - (@prev_slash+1) INTO @prev_slash;
SELECT N1.id, N1.left, N1.right INTO @c_node, @c_node_left, @c_node_right
FROM tree AS N1, tree AS N2 WHERE N2.left BETWEEN N1.right AND N1.left
AND N2.right BETWEEN N1.right AND N1.left;
SET @c_path = CONCAT(@c_path, @next_name, '/');
END WHILE;
SELECT @c_node;
END;
Вылетает:
FUNCTION test.SUBSTRING does not exist