Пропустить предельное условие динамически - PullRequest
2 голосов
/ 13 октября 2011
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.

Единственный способ, которым я знаю, это сделать запрос огромной строкой, что было бы уродливо.

1 Ответ

2 голосов
/ 13 октября 2011

Вы можете написать

LIMIT ALL

, чтобы получить все строки.Кроме того, я цитирую руководство :

Если выражение count имеет значение NULL, оно обрабатывается как LIMIT ALL, т. Е. Без ограничений.Если start имеет значение NULL, оно обрабатывается так же, как OFFSET 0

Ergo, просто напишите:

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