powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / function return table. HELP
4 сообщений из 4, страница 1 из 1
function return table. HELP
    #39111109
noTpyJI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите написать хранимую функцию
Нужно что бы функция вернула таблицу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE OR REPLACE FUNCTION return_cat_tree() 
RETURNS table
(
	id 		int, 
	parent_id 	int,
	name		character varying(100),
	n		text,
	lvl		int
) AS 
$BODY$
BEGIN
	WITH RECURSIVE tree (id, parent_id, name, branchname, lvl )
	AS 
	(	
		SELECT c.id, c.parent_id, c.name, c.name || '-->', ( 1 ) as lvl 
		FROM category c 
		WHERE c.parent_id is NULL
		
		UNION ALL

		SELECT c.id, c.parent_id, c.name, tree.branchname || c.name, (tree.lvl + 1 ) 
		FROM category c
		INNER JOIN tree ON tree.id = c.parent_id
	)
	SELECT tree.id, tree.parent_id, tree.name, tree.branchname as n, tree.lvl 
	FROM tree 
	ORDER BY tree.branchname;
END
$BODY$ LANGUAGE plpgsql;

...
Рейтинг: 0 / 0
function return table. HELP
    #39111123
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noTpyJI,

LANGUAGE plpgsql sql;
...
Рейтинг: 0 / 0
function return table. HELP
    #39111145
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noTpyJI,

В вашем случае можно вот так сделать на чистом SQL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE OR REPLACE FUNCTION return_cat_tree() 
RETURNS table
(
	id 		int, 
	parent_id 	int,
	name		character varying(100),
	n		text,
	lvl		int
) AS 
$BODY$
	WITH RECURSIVE tree (id, parent_id, name, branchname, lvl )
	AS 
	(	
		SELECT c.id, c.parent_id, c.name, c.name || '-->', ( 1 ) as lvl 
		FROM category c 
		WHERE c.parent_id is NULL
		
		UNION ALL

		SELECT c.id, c.parent_id, c.name, tree.branchname || c.name, (tree.lvl + 1 ) 
		FROM category c
		INNER JOIN tree ON tree.id = c.parent_id
	)
	SELECT tree.id, tree.parent_id, tree.name, tree.branchname as n, tree.lvl 
	FROM tree 
	ORDER BY tree.branchname;
$BODY$ LANGUAGE sql;


если же есть всё же желание использовать язык plpgsql, то вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE OR REPLACE FUNCTION return_cat_tree() 
RETURNS table
(
	id 		int, 
	parent_id 	int,
	name		character varying(100),
	n		text,
	lvl		int
) AS 
$BODY$
BEGIN
        RETURN QUERY
	WITH RECURSIVE tree (id, parent_id, name, branchname, lvl )
	AS 
	(	
		SELECT c.id, c.parent_id, c.name, c.name || '-->', ( 1 ) as lvl 
		FROM category c 
		WHERE c.parent_id is NULL
		
		UNION ALL

		SELECT c.id, c.parent_id, c.name, tree.branchname || c.name, (tree.lvl + 1 ) 
		FROM category c
		INNER JOIN tree ON tree.id = c.parent_id
	)
	SELECT tree.id, tree.parent_id, tree.name, tree.branchname as n, tree.lvl 
	FROM tree 
	ORDER BY tree.branchname;
END
$BODY$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
function return table. HELP
    #39111158
noTpyJI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grufos, спасибо огромное!!!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / function return table. HELP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]