Возврат функции типа данных в PostgreSQL - PullRequest
0 голосов
/ 21 мая 2018

PostgreSQL замечает мне ошибку, которая выглядит следующим образом:

ОШИБКА: назначение запроса данных результата не указано в запросе

Вот моя первоначальная функция созданияcode:

    CREATE OR REPLACE FUNCTION public.scrolltable(
    IN p_pagenumber integer,
    IN p_pagesize integer)
  RETURNS TABLE(name character varying, id character varying, rn bigint) AS
$BODY$
    Declare v_startRow int;
 v_endRow int;Begin


    v_startRow := (p_pagenumber - 1) * p_pagesize + 1;
    v_endRow := p_pagenumber * p_pagesize;

    With Result as (
        Select *,
        ROW_NUMBER() OVER (Order By "ID" ASC)
        From "Training"
    )

    select * from Result
    Where row_number Between v_startRow AND v_endRow;

End;
$BODY$
  LANGUAGE plpgsql

Я попытался выполнить только запросы на выборку, и он показал таблицу следующим образом:

------------------------------------------------------------------------
|<Name>                   |  <ID>                      |  <row_number> |
|<character varying(100)> |  <character varying(100)>  |  <bigint>     |
------------------------------------------------------------------------

Я вернул правильные типы данных для таблицы результатов, но почему явсе еще получаете эту ошибку?

ОБНОВЛЕНО: Спасибо за все ваши ответы.Я успешно исправил ошибку с таким видом:

CREATE OR REPLACE FUNCTION public.scrolltable(
    IN p_pagenumber integer,
    IN p_pagesize integer)
  RETURNS TABLE(name character varying, id character varying, rownumber bigint) AS
$BODY$
    Declare v_startRow int;
 v_endRow int;Begin


    v_startRow := (p_pagenumber - 1) * p_pagesize + 1;
    v_endRow := p_pagenumber * p_pagesize;

    RETURN QUERY With Result as (
        Select *,
        ROW_NUMBER() OVER (Order By "ID" ASC)
        From "Training"
    )

    select * from Result
    Where row_number Between v_startRow AND v_endRow;

End;
$BODY$
  LANGUAGE plpgsql

1 Ответ

0 голосов
/ 21 мая 2018

Поскольку вы написали Postgres Function (pg / plsql), вам нужно просто добавить return query в ваш последний оператор, где вы хотите, чтобы ваша функция возвращала некоторый результат, что-то вроде этого:

return query select * from Result
Where row_number Between v_startRow AND v_endRow;

Это должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...