Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Написать функцию, возвращающую набор данных.  [new]
mnbvcx
Member

Откуда:
Сообщений: 285
Решил переделать View в функцию, принимающую параметры.
Т.е. будет сначала несколько строк вычислений переменных, а потом один селект (или больше одного, но возвращается 1 набор данных).
Как это сделать на pl/pgsql, чтобы я мог потом сделать селект этой ф-ии в pgadmin или dbforge studio и увидеть вернувшиеся строки?

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

Для pl/pgsql ф-я, возвращающая refcursor, мне подойдёт?
27 май 21, 15:50    [22328080]     Ответить | Цитировать Сообщить модератору
 Re: Написать функцию, возвращающую набор данных.  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4785
mnbvcx
Решил переделать View в функцию, принимающую параметры.
Т.е. будет сначала несколько строк вычислений переменных, а потом один селект (или больше одного, но возвращается 1 набор данных).
Как это сделать на pl/pgsql, чтобы я мог потом сделать селект этой ф-ии в pgadmin или dbforge studio и увидеть вернувшиеся строки?

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

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


Это делается через RETURNS TABLE
https://www.postgresql.org/docs/13/plpgsql-declarations.html#PLPGSQL-DECLARATION-PARAMETERS
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

Сообщение было отредактировано: 27 май 21, 16:30
27 май 21, 16:36    [22328101]     Ответить | Цитировать Сообщить модератору
 Re: Написать функцию, возвращающую набор данных.  [new]
mnbvcx
Member

Откуда:
Сообщений: 285
Maxim Boguk, RETURNS TABLE не подходит, т.к. подразумевает определение всех полей в резалтсете на выходе.
27 май 21, 16:44    [22328105]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить