CREATE OR REPLACE FUNCTION somefunction(ret refcursor, _id oid, _offset integer, _limit integer) RETURNS refcursor
LANGUAGE plpgsql
AS $_$
BEGIN
OPEN $1 FOR
--My actual select is much more complicated that this.
SELECT a FROM b
WHERE id = _id
ORDER BY otu.id desc
--does not work: invalid input syntax for integer: "ALL"
LIMIT (CASE WHEN _limit IS NULL THEN 'ALL' ELSE _limit END)
--CASE WHEN _limit IS NOT NULL THEN LIMIT _limit END
OFFSET (CASE WHEN _offset IS NULL THEN '0' ELSE _offset END);
RETURN $1;
END
$_$;
Я хочу, чтобы _offset и _limit обнулялись, поэтому все результаты могут быть возвращены.Как я могу динамически опустить часть LIMIT этого запроса, если _limit имеет значение NULL.
Единственный способ, которым я знаю, это сделать запрос огромной строкой, что было бы уродливо.