Функция Postgresql, возвращающая количество записей - PullRequest
0 голосов
/ 09 сентября 2018

Я хотел бы создать функцию, возвращающую количество записей, которые может генерировать выражение SQL, переданное в качестве параметра. Кто-нибудь может поставить меня на правильный путь?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

В простом SQL вы можете получить количество возвращенных строк, используя производную таблицу (поместив запрос в подзапрос в предложении FROM), например:

select count(*)
from (
    <your query>
    ) s;

Сделайте то же самое в plpgsqlфункция.Вам нужна динамическая команда , так как функция должна работать для любого допустимого запроса SQL:

create or replace function number_of_rows(query text)
returns bigint language plpgsql as $$
declare
    c bigint;
begin
    execute format('select count(*) from (%s) s', query) into c;
    return c;
end $$;

Пример:

select number_of_rows('select * from generate_series(1, 3)');

 number_of_rows 
----------------
              3
(1 row) 
0 голосов
/ 09 сентября 2018

Ваша функция должна возвращать SETOF некоторый (запись) тип. Затем вы используете синтаксис RETURN NEXT для возврата каждой строки.

См. Пример на странице документа для этого. https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4

...