Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли как то не ручным способом типизировать вывод из функции произвольной стурктуры? / 3 сообщений из 3, страница 1 из 1
31.01.2022, 18:03
    #40130823
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как то не ручным способом типизировать вывод из функции произвольной стурктуры?
Ругается на то, что должен быть список определений столбцов.
Есть ли какой то путь, как заставить его сформироваться автоматически?
(через темповые таблицы, json или любой способ "прочитать датасет" не указывая явно With и список колонок и типов данных ... )

Код: 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.
CREATE OR REPLACE FUNCTION tmp()
    RETURNS SETOF refcursor 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
    ROWS 1000

AS $BODY$
DECLARE
	ref1 refcursor := 'main'; 
BEGIN
	OPEN ref1 FOR
	SELECT * FROM crosstab(
					'SELECT	employee_id, MIN(order_date) as min_date, EXTRACT(MONTH FROM order_date)::INT as MONTH, COUNT(*)::INT as c
					FROM	ORDERS O
					GROUP BY EXTRACT(MONTH FROM order_date), employee_id
					ORDER BY 1',
					'SELECT DISTINCT EXTRACT(MONTH FROM order_date)::INT as MONTH
					 FROM	ORDERS O'
				);

RETURN NEXT ref1;
END;
$BODY$;


SELECT	*
INTO C
FROM	tmp();
...
Рейтинг: 0 / 0
01.02.2022, 13:56
    #40131004
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как то не ручным способом типизировать вывод из функции произвольной стурктуры?
Dzianis,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION cursortojsonset(curpdata refcursor)
RETURNS SETOF jsonb
LANGUAGE plpgsql
AS $function$
declare
  rvRecord record;
begin
  loop
    fetch curpData into rvRecord;
    exit when not found;
    return next to_jsonb(rvRecord);
  end loop;
  close curpData;
  return;
end;
$function$
;




Использование

Код: plsql
1.
2.
SELECT j, j->'employee_id'
FROM cursortojsonset(tmp()) as j;
...
Рейтинг: 0 / 0
01.02.2022, 22:08
    #40131121
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как то не ручным способом типизировать вывод из функции произвольной стурктуры?
Swa111, не стартануло.
Не хочет работать именно на уровне
Код: sql
1.
2.
OPEN ref1 FOR
	SELECT * FROM crosstab(



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


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