функция возвращает несколько столбцов как один столбец вместо нескольких столбцов - PullRequest
17 голосов
/ 16 августа 2011

В настоящее время я пишу функцию в postgresql 9.04, где я пытаюсь использовать переменную, которая будет использоваться в операторе выбора, а затем вернуть результаты.

Утверждение, которое я сделал, простое и работает; однако все столбцы выводятся в один столбец, а не в несколько столбцов.

вот моя функция:

create or replace function foo(IN pID integer, OUT project_id integer, OUT project_name    text, OUT project_type text, OUT project_description text, OUT project_status text)
returns setof record as

$$
select project_id, project_name, project_type, project_description, project_status from     t_projects
where project_id = $1;
$$

LANGUAGE SQL;


select foo(6) -- runs function

токовый выход выглядит так:

"(6,"test project","inbound","inbound test","processing")"

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

Заранее спасибо.

1 Ответ

29 голосов
/ 16 августа 2011

вам нужно вызвать функцию следующим образом:

select * from foo(6);

, который вернет что-то вроде этого:

project_id | project_name | project_type | project_description | project_status
-----------|--------------|--------------|---------------------|----------------
         6 | test project |      inbound |        inbound test |     processing

Это причуды postgres, которые можно назвать обоими способами и дать вам результат. Возможно, вы захотите проверить документы по множеству возвращающих функций, есть и другие способы сделать это. О, на ней есть вики-страница, написанная для plpgsql, но большинство из них применимо и к функциям sql: http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...