powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть результат работы запроса plpgsql?
15 сообщений из 15, страница 1 из 1
Как вернуть результат работы запроса plpgsql?
    #33815157
TempG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть работающая функция на sql ,
Код: plaintext
1.
2.
3.
4.
CREATE TYPE ветвь AS (id int4, название text);

CREATE FUNCTION дерево_уровень0() RETURNS SETOF ветвь AS $$
    SELECT id, группа0 FROM деревья ORDER BY группа0;
$$ LANGUAGE SQL;
а подскажите, как написать аналогичную на plpgsql ?

Сенькс.
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33815236
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
-- Function: tree_level0()
CREATE OR REPLACE FUNCTION tree_level0()
  RETURNS setof forums AS
$BODY$
declare
	forum_row forums%rowtype;
begin
	for forum_row in select * from forums order by forum_name
	loop
		return next forum_row;
	end loop;
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33815238
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
forums - это таблица из двух полей: id и forum_name.

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33815294
TempG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кувалдин Роман
Код: plaintext
1.
2.
3.
4.
5.
6.
...
	for forum_row in select * from forums order by forum_name
	loop
		return next forum_row;
	end loop;
...

Спасибо, а можно без цикла обойтись?
Введь результат запроса уже в памяти,
а RETURNS SETOF xxx это и есть описание возвращаемого типа.

Должен же быть способ без цикла!?
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33815783
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да. писать sql функцию
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33816776
TempG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZemAда. писать sql функцию
Нужны IF ... THEN внутри процедуры,
а процедурах на Sql их как-бы нет :(

Должен же быть способ вернуть весь результат запроса из plpgsql без цикла.
Гуру хелп!
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817097
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для чего IF ... THEN?
case не подойдет?
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817100
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZemAcase не подойдет?
вместо IF ... THEN
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817134
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TempG Должен же быть способ вернуть весь результат запроса из plpgsql без цикла.а пачиму, собсно?
этто вас такк озарило?

Могу конечно врать, но [единственная] структура вывода в SETOF из plpgsql - RETURN NEXT ...; И выводит она позаписно.
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817149
TempG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZemAА для чего IF ... THEN?
case не подойдет?
В зависимости от значений параметров нужно выполнить разные запросы
с разными условиями в WHEN и возвернуть результат.
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817216
TempG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4321ё TempG Должен же быть способ вернуть весь результат запроса из plpgsql без цикла.а пачиму, собсно?
этто вас такк озарило?

Могу конечно врать, но [единственная] структура вывода в SETOF из plpgsql - RETURN NEXT ...; И выводит она позаписно.
Просто из логики, если в простых процедурах Sql можно вернуть результат выборки без цикла,
то неужели в plpgsql нужно в цикле построчно куда то копировать данные
чтобы процедура их вернула, они-же уже выбраны SELECT-ом,
их бы просто вернуть цельным блочком. (размечтался)

А циклы как-то не солидно, зачем тогда язык SQL придумали, recordset-щина какая-то.
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33817313
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FORUM_ROW - это присоединенный курсор. И никуда он еще не загружен, а фетчится по мере необходимости.
Поэтому без цикла нельзя.

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33818120
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через refcursor можно и без цикла. Но тогда код сложнее получается в клиентском приложение или при вызове из другой функции.

Насчет происхождения построчной обработки. В доке написано, что конструкция return next изначально предполагала возможность передачи управления после каждой строки, т.е. в выходной поток данные могли бы выдаваться сразу, не дожидаясь выхода из функции. Тем не менее, это не было сделано. Сейчас весь набор накапливается в памяти, после превышения work_mem сливается во временный файл, и выдается чохом при выходе.
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33834517
Фотография Quasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению после MSSQL к этому сложно привыкнуть. :(
...
Рейтинг: 0 / 0
Как вернуть результат работы запроса plpgsql?
    #33834826
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QuasarК сожалению после MSSQL к этому сложно привыкнуть. :(
единственный незаполненный промежуток на пути к желаемому - отсутствие переменной типа "набор" (таблица). По ее реализации можно бы было и что-то в стиле Return _table_var; вообразить.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть результат работы запроса plpgsql?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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