问题描述
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 (将#修改为@)