PostreSQL-“运算符不存在:字符变化=字符变化[]:将数组传递给ANY时?

问题描述

我有一个plpgsql函数,该函数返回varchar []

CREATE OR REPLACE FUNCTION public.get_distr_parents(distr_id character varying)
 RETURNS character varying[]
 LANGUAGE plpgsql
AS $function$
DECLARE
        all_ids VARCHAR[];
        parent_id VARCHAR(6);
        cur_id VARCHAR(6) := distr_id;
BEGIN
    all_ids := all_ids || distr_id;
    parent_id := (SELECT dl.parent_distr_id  FROM distribution_list dl WHERE dl.id  = distr_id);

        WHILE (parent_id IS NOT NULL) LOOP
            all_ids := all_ids || parent_id;
            cur_id := parent_id;
            parent_id := (SELECT dl.parent_distr_id  FROM distribution_list dl WHERE dl.id  = cur_id);
        END LOOP;
    
    RETURN all_ids;
END;
$function$
;

函数似乎按预期方式工作(例如,它返回诸如{2,1}之类的数组)。

但是,我试图执行一个查询,该查询返回ID在返回数组中的记录:

SELECT * FROM distribution_list dl 
WHERE dl.id =  ANY((SELECT get_distr_parents('5305')));

查询返回错误

sql Error [42883]: ERROR: operator does not exist: character varying = character varying[]
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
  Position: 50

但是,以下代码执行得很好:

SELECT * FROM distribution_list dl 
WHERE dl.id =  ANY(ARRAY((SELECT get_distr_parents('5305'))));

尽管上述方法可行,但我宁愿避免每次都将其包装在ARRAY中(特别是因为我计划在Java程序中使用它)。

我想念什么?如果函数已经返回数组,为什么将其包装在ARRAY()中会改变行为?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)