Выбор нескольких полей с использованием функции.

Всем привет!

Столкнулся с такой проблемой.

У меня есть таблица tags

TABLE "public.tags"
  COLUMN   |         Type          |                     Modifiers
-----------+-----------------------+---------------------------------------------------
 id        | integer               | NOT NULL DEFAULT NEXTVAL('tags_id_seq'::regclass)
 tagname   | character varying(50) | NOT NULL
 descr     | text                  | NOT NULL
 lvl       | smallint              | NOT NULL DEFAULT 0
 parent_id | integer               | NOT NULL DEFAULT 0
 cnt       | integer               | NOT NULL DEFAULT 0
 author_id | integer               | NOT NULL DEFAULT 1

Есть такая функция:

CREATE OR REPLACE FUNCTION GetTagsById2 (id integer) returns SETOF "tags" AS
$$
	SELECT * FROM tags WHERE id= $1;
$$
LANGUAGE 'sql' VOLATILE SECURITY DEFINER;

При выполнении функции, например SELECT  GetTagsById2(2);
Она возвращает 1 поле - строку, в которой содержиться текст: (2,"Литература","Литература",1,1,0,1)

Можно ли сделать так, что бы функция вернула не 1 поле со строкой, содержащей 7 полей таблицы tags, а 7 полей. В каждом поле, соответственно свой параметр?
Я знаю один выход: дописать в функцию OUT параметры и селект сделать с присвоением переменных. Но, может можно как-то обойтись без этого? Что бы не писать огромный селект с переменными и прочим. Что бы был какой-то независимый от кол-ва полей вариант. Ну, или, если зависимый, то он возвращал бы результат так, как я описал.

Спасибо :)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Не

Спасибо

Да я давно решил проблему, не мог никак отписаться сюда для других :) Сайт глючил что-то

Спасибо за содействие :))

Решение

Решил проблему очень просто :)

select * from GetTagsById2(2);

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023