Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Написать функцию, возвращающую набор данных. / 3 сообщений из 3, страница 1 из 1
27.05.2021, 15:50
    #40073581
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию, возвращающую набор данных.
Решил переделать View в функцию, принимающую параметры.
Т.е. будет сначала несколько строк вычислений переменных, а потом один селект (или больше одного, но возвращается 1 набор данных).
Как это сделать на pl/pgsql, чтобы я мог потом сделать селект этой ф-ии в pgadmin или dbforge studio и увидеть вернувшиеся строки?

Для oracle это была бы ф-я, возвращающая sys_refcursor и я бы вызвал её в pl/sql developer типа
Код: plsql
1.
select my_func (p1, p2) from dual


Для pl/pgsql ф-я, возвращающая refcursor, мне подойдёт?
...
Рейтинг: 0 / 0
27.05.2021, 16:36
    #40073592
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию, возвращающую набор данных.
mnbvcx
Решил переделать View в функцию, принимающую параметры.
Т.е. будет сначала несколько строк вычислений переменных, а потом один селект (или больше одного, но возвращается 1 набор данных).
Как это сделать на pl/pgsql, чтобы я мог потом сделать селект этой ф-ии в pgadmin или dbforge studio и увидеть вернувшиеся строки?

Для oracle это была бы ф-я, возвращающая sys_refcursor и я бы вызвал её в pl/sql developer типа
Код: plsql
1.
select my_func (p1, p2) from dual


Для pl/pgsql ф-я, возвращающая refcursor, мне подойдёт?


Это делается через RETURNS TABLE
https://www.postgresql.org/docs/13/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Another way to declare a PL/pgSQL function is with RETURNS TABLE, for example:

CREATE FUNCTION extended_sales(p_itemno int)
RETURNS TABLE(quantity int, total numeric) AS $$
BEGIN
    RETURN QUERY SELECT s.quantity, s.quantity * s.price FROM sales AS s
                 WHERE s.itemno = p_itemno;
END;
$$ LANGUAGE plpgsql;



и далее select * from функция(параметры);

Или через RETURNS SETOF (но это менее гибко-удобно).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
27.05.2021, 16:44
    #40073596
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написать функцию, возвращающую набор данных.
Maxim Boguk, RETURNS TABLE не подходит, т.к. подразумевает определение всех полей в резалтсете на выходе.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Написать функцию, возвращающую набор данных. / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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