【发布时间】:2020-03-30 08:59:40
【问题描述】:
我有三张桌子:
文本:行中的文本
trigram:所有文本行的trigram
text_trigram:文本行包含的三元组,中间表
我尝试执行此操作:
create or replace function get_values(IN t_id integer[], IN tri_id integer[], OUT count_values integer[][])
as $$
declare
count_value integer[];
rec integer;
tri_n integer := array_length(tri_id, 1);
begin
for rec in select unnest(tri_id)
loop
select into count_value count(text_id) from unnest(t_id) as required_t_id(r_t_id) left join text_trigram on text_id = required_t_id.r_t_id and trigram_id = rec group by text_id;
count_values := array_cat(count_values, count_value);
end loop;
end; $$
language plpgsql;
执行没问题,我执行后:
select * from get_values(ARRAY[9,210,999], ARRAY[621, 3266]);
错误信息出来了
数组错误:数组值必须以“}”或维度信息开头
下面我也试过了,
select * from get_values('{9,210,999}','{621,3266}');
我收到一条错误消息:
function get_values(unkonwn, unknown) 不清楚
【问题讨论】:
-
你为什么要取消嵌套输入数组
tri_id两次? -
@a_horse_with_no_name 抱歉,打错了,应该是
t_id,我已经修改了 -
我认为整个循环可能是完全没有必要的,这可以通过单个聚合来完成,而无需 PL/pgSQL 开始 - 但无需解释 你想在那里做什么,这真的很难回答。
-
你的肉我可以在选择而不是循环上做吗?我不确定,因为我这里需要的是一个二维数组
-
嗯,SELECT 语句的结果是本质上是一个二维“数组”
标签: sql arrays postgresql plpgsql sql-function