当数组为空而没有动态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;