Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть результат работы запроса plpgsql? / 15 сообщений из 15, страница 1 из 1
26.06.2006, 17:50
    #33815157
TempG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
Есть работающая функция на 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
26.06.2006, 18:17
    #33815236
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
примерно вот так:

Код: 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
26.06.2006, 18:18
    #33815238
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
forums - это таблица из двух полей: id и forum_name.

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
26.06.2006, 18:39
    #33815294
TempG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
Кувалдин Роман
Код: 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
27.06.2006, 08:22
    #33815783
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
да. писать sql функцию
...
Рейтинг: 0 / 0
27.06.2006, 13:57
    #33816776
TempG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть результат работы запроса plpgsql?
ZemAда. писать sql функцию
Нужны IF ... THEN внутри процедуры,
а процедурах на Sql их как-бы нет :(

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

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

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

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

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

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


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