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

Код: 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
23.11.2015, 15:33
    #39111123
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
function return table. HELP
noTpyJI,

LANGUAGE plpgsql sql;
...
Рейтинг: 0 / 0
23.11.2015, 15:43
    #39111145
grufos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
function return table. HELP
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
23.11.2015, 15:49
    #39111158
noTpyJI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
function return table. HELP
grufos, спасибо огромное!!!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / function return table. HELP / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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