Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как использовать строки из курсора в качестве результата подзапроса? / 4 сообщений из 4, страница 1 из 1
29.04.2020, 10:10
    #39952726
trn101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать строки из курсора в качестве результата подзапроса?
Пример (для объяснения сути проблемы):
Код: plsql
1.
2.
3.
4.
5.
declare
    curs1 cursor for
      select id from products;

    select max(id) from (fetch all curs1);



Ошибка: syntax error at or near "fetch"
...
Рейтинг: 0 / 0
29.04.2020, 21:15
    #39953088
grgdvo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать строки из курсора в качестве результата подзапроса?
trn101,

какой в этом смысл??
если вы можете написать
Код: sql
1.
select max(id) from products;
...
Рейтинг: 0 / 0
30.04.2020, 04:39
    #39953149
trn101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать строки из курсора в качестве результата подзапроса?
grgdvo, это не более чем элементарный пример, чтобы показать суть проблемы без лишней логики реальной задачи.
...
Рейтинг: 0 / 0
01.05.2020, 17:03
    #39953571
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать строки из курсора в качестве результата подзапроса?
trn101,

Можно использовать такой вариант, но производительность сильно падает.

Создаем тип trow который описывает строку из запроса.

Функция fnc_etl извлекает построчно данные из курсора и передает их в запрос.

функция fnc_getcursor должна возвращать курсор с типом refcursor.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TYPE trow AS (id numeric);

CREATE OR REPLACE FUNCTION fnc_etl(curvData refcursor)
 RETURNS SETOF trow
 LANGUAGE plpgsql
AS $function$
declare
  vResult trow;
begin 
  loop
    fetch curvData into vResult;
    exit when not found;
    return next (vResult);
  end loop;
  close curvData;
end;
$function$;

Select * from fnc_etl(fnc_getcursor(...));
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как использовать строки из курсора в качестве результата подзапроса? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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