powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функция с неопределенным количеством выходных курсоров
1 сообщений из 1, страница 1 из 1
функция с неопределенным количеством выходных курсоров
    #39392238
valkiri9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Подскажите, как написать функцию с неопределенным количеством выходных курсоров.
Первый вариант:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
create or replace function dbo.test_print()
returns record
as
$$
declare 
   v_i int;
   v_str text;
   v_res record;
begin
create temporary table tmp_test (ref1 refcursor) on commit drop;

v_str := 'do $' || '$
declare v_ref refcursor;
begin
Open v_ref for
select 1 as value;
insert into tmp_test (ref1)
values (v_ref);
end;
$' || '$';

execute (v_str);

v_i := 2;
while v_i < 5 loop

v_str := 'do $' || '$
declare v_ref refcursor;
begin
alter table tmp_test add column ref' || cast(v_i as varchar) || ' refcursor;
Open v_ref for
select ' || cast(v_i as varchar) || ' as value;
update tmp_test 
set ref' || cast(v_i as varchar) || ' = v_ref;
end;
$' || '$';

execute (v_str);
v_i := v_i + 1;
end loop;

select *
into v_res
from tmp_test;

return v_res;    
end;
$$ language plpgsql;

select * from dbo.test_print() as t (rev1 refcursor, rev2 refcursor, rev3 refcursor, rev4 refcursor);


не совсем подходит, т.к. при вызове функции явно указывается сколько будет курсоров.
Второй вариант с объявлением заранее большим количеством выходных курсоров.
Есть ли более изящное решение?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функция с неопределенным количеством выходных курсоров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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