Sql 动态省略限制子句

Sql 动态省略限制子句,sql,postgresql,Sql,Postgresql,我希望_offset和_limit可以为null,这样所有结果都可以返回。如果_LIMIT为NULL,如何动态省略此查询的LIMIT部分 我知道的唯一方法是将查询变成巨大的字符串,这会很难看。您可以编写 CREATE OR REPLACE FUNCTION somefunction(ret refcursor, _id oid, _offset integer, _limit integer) RETURNS refcursor LANGUAGE plpgsql AS $_$ B

我希望_offset和_limit可以为null,这样所有结果都可以返回。如果_LIMIT为NULL,如何动态省略此查询的LIMIT部分

我知道的唯一方法是将查询变成巨大的字符串,这会很难看。

您可以编写

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
$_$;
获取所有行。此外,我引述:

如果count表达式的计算结果为NULL,则将其视为LIMIT ALL,即no LIMIT。如果start的计算结果为NULL,则与偏移量0相同

因此,简单地写下:

LIMIT ALL
LIMIT _limit 
OFFSET _offset