Postgresql 将用户定义的类型数组作为输入参数传递给函数

Postgresql 将用户定义的类型数组作为输入参数传递给函数,postgresql,postgresql-11,Postgresql,Postgresql 11,我在PostgreSQL(11.5版)中创建了一个用户定义的类型 创建类型key_TYPE AS(key_无字符变化(50),key_nm字符变化(128)) 我创建了下面的函数,输入参数类型为key\u type[],输出为TEXT 创建或替换函数fn\u net(键类型为[]的inp)将文本返回为……。 但我无法调用该函数,我已尝试如下操作 do $$ declare v_key key_type[]; v_res TEXT; begin v_key.key_no :

我在PostgreSQL(11.5版)中创建了一个用户定义的类型

创建类型key_TYPE AS(key_无字符变化(50),key_nm字符变化(128))

我创建了下面的函数,输入参数类型为
key\u type[]
,输出为
TEXT

创建或替换函数fn\u net(键类型为[]的inp)将文本返回为……。

但我无法调用该函数,我已尝试如下操作

do  
$$  
declare  
v_key key_type[];  
v_res TEXT;  
begin  
v_key.key_no := '709R';  
v_key.key_nm := 'Risk';  
select * from fn_det(v_key) into v_res;  
raise notice '%', v_res;  
end;  
$$  
language plpgsql;
我收到格式错误的数组错误或函数不存在错误。 请帮助我如何正确传递输入


注意:如果我将输入类型指定为
key\u type
而不是
key\u type[]
,则我可以成功运行,但我需要数组类型满足要求。

您的变量分配错误,您需要提供要分配元素的数组索引

调用返回单个值的函数时,不需要PL/pgSQL中的SELECT,只需分配结果:

do  
$$  
declare  
  v_key key_type[];  
  v_res TEXT;  
begin  
  v_key[1] := ('709R', 'Risk'); -- first array element
  v_key[2] := ('711X', 'Risk2'); -- second array element
  v_res := fn_det(v_key);  
  raise notice '%', v_res;  
end;  
$$  
language plpgsql;