将用户定义的类型数组作为输入参数传递给函数
Passing user-defined Type Array as input parameter to a function
我在 PostgreSQL(版本 11.5)中创建了一个用户定义的类型。
CREATE TYPE key_type AS (key_no character varying(50), key_nm character varying(128));
我创建了下面的函数,输入参数类型为 key_type[]
,输出为 TEXT
。
create or replace function fn_net(inp IN key_type[]) returns TEXT as........
但是我无法调用该函数,我试过如下。
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_type
而不是 key_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;
我在 PostgreSQL(版本 11.5)中创建了一个用户定义的类型。
CREATE TYPE key_type AS (key_no character varying(50), key_nm character varying(128));
我创建了下面的函数,输入参数类型为 key_type[]
,输出为 TEXT
。
create or replace function fn_net(inp IN key_type[]) returns TEXT as........
但是我无法调用该函数,我试过如下。
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_type
而不是 key_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;