繁体   English   中英

如何在 postgresql 中为包含 varchar(2) ARRAY[50] 类型的输入变量的 function 传递参数

[英]How to pass parameter for a function containing input variable of type varchar(2) ARRAY[50] in postgresql

这是用户定义的类型和 function

CREATE TYPE test AS (test varchar(2) ARRAY[50]);
create function my_function(p_ste INOUT test ) returns text language plpgsql as $$
begin
  return p_ste ;
end;
$$;

调用 function 时如何传递参数?

function 只能有输入参数(关键字 IN 实际上是可选的):不能使用 INOUT。

对于这种情况,您可以使用刚刚创建的类型名称声明 function 参数。 例子:

使用以下输入:

create type my_type as(field varchar(2) array[50]);
create table my_table(c1 serial, c2 my_type);
insert into my_table(c2) values (row(array ['aa', 'bb' ]));
insert into my_table(c2) values (row(array ['cc', 'dd' ]));
select * from my_table;
--
create function my_function(p_val my_type) returns my_type 
language plpgsql 
as $$
begin
 p_val.field = (array['ok','ok']);
 return p_val;
end;
$$;
--
create procedure my_proc ()
language plpgsql
as $$
declare
 l_var1 my_table;
 l_var2 my_table;
begin
 select c2 into l_var1.c2 from my_table limit 1;
 raise notice 'input value=%', l_var1.c2;
 select my_function(l_var1.c2) into l_var2.c2;
 raise notice 'returned value=%', l_var2.c2;
end;
$$;

我有以下 output:

create type my_type as(field varchar(2) array[50]);
CREATE TYPE

create table my_table(c1 serial, c2 my_type);
CREATE TABLE

insert into my_table(c2) values (row(array ['aa', 'bb' ]));
INSERT 0 1

insert into my_table(c2) values (row(array ['cc', 'dd' ]));
INSERT 0 1

select * from my_table;
 c1 |     c2      
----+-------------
  1 | ("{aa,bb}")
  2 | ("{cc,dd}")
(2 rows)

create function my_function(p_val my_type) returns my_type 
language plpgsql 
as $$
begin
 p_val.field = (array['ok','ok']);
 return p_val;
end;
$$;
CREATE FUNCTION

create procedure my_proc ()
language plpgsql
as $$
declare
 l_var1 my_table;
 l_var2 my_table;
begin
 select c2 into l_var1.c2 from my_table limit 1;
 raise notice 'input value=%', l_var1.c2;
 select my_function(l_var1.c2) into l_var2.c2;
 raise notice 'returned value=%', l_var2.c2;
end;
$$;
CREATE PROCEDURE

call my_proc();
psql:tt.sql:74: NOTICE:  input value=("{aa,bb}")
psql:tt.sql:74: NOTICE:  returned value=("{ok,ok}")
CALL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM