当数组为空而没有动态sql时,Postgres sql返回all

当数组为空而没有动态sql时,Postgres sql返回all,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我在postgres sql函数中遇到了一个问题,当整数数组为空时,我需要返回所有记录 目前,我正在使用动态sql来实现它,方法是使用if语句检查数组是否为空,因此不要在查询中concat语句。 我想知道,如果没有动态sql,是否还有其他方法可以实现它 例如,使用动态sql: CREATE OR REPLACE FUNCTION testme() RETURNS TABLE(Title text) LANGUAGE plpgsql AS $$ DECLARE one int[]; BEGIN o

我在
postgres sql函数中遇到了一个问题,当整数数组为空时,我需要返回所有记录

目前,我正在使用
动态sql
来实现它,方法是使用
if语句
检查数组是否为空,因此不要在查询中concat
语句
。 我想知道,如果没有
动态sql
,是否还有其他方法可以实现它

例如,使用动态sql:

CREATE OR REPLACE FUNCTION testme() RETURNS TABLE(Title text) LANGUAGE plpgsql AS $$
DECLARE
one int[];
BEGIN
one:= '{}';

RAISE NOTICE 'value:%', array_length(one,1);
if array_length(one,1) > 0 THEN
RETURN QUERY EXECUTE 'SELECT  "Title" from "Tickets" where "TicketID"  
IN(SELECT(UNNEST($1)));'  USING one;
ELSE
RETURN QUERY EXECUTE 'SELECT "Title"  from "Tickets"';

END IF;
END
$$;
SELECT testme();

cardinality
为空数组返回0,而
array\u length
返回
null

Hmm-以前从未注意到关于
array\u length
的情况。大概是因为不知道任何特定数组可以有多少维。谢谢Clodoaldo。谢谢它成功了!!!顺便问一句,在我的回答中,有人对我的表现不好吗?答案同样适用于(SELECT(UNNEST(one))@duduhayo,它们的行为应该是一样的。
select  "Title"
from "Tickets"
where
    "TicketID" = any (one)
    or
    cardinality(one) = 0;