当前位置:网站首页>pgsql函数中的return类型
pgsql函数中的return类型
2022-08-04 05:28:00 【大黄猫一号】
在pgsql函数中有三个类返回类型,分别是 RETURNS expression,RETURNS SETOF sometype,RETURNS RECORD。
RETURNS expression类型返回的是一个标量类型或者一个复合类型,标量类型类似与int等,复合类型类似rowtype其中rowtype类型的返回实例如下:
首先创建一个表test1,表中定义两个列id以及info
postgres=# create table test1(id int,info text);
向表中插入两行数据:
postgres=# insert into test1 values(1,'a'),(2,'b');
INSERT 0 2
postgres=# select * from test1;
id | info
----+------
1 | a
2 | b
(2 rows)
如果想用function查询表中对应id的info可以创建下面的函数:
create or replace function find_info(id_in int) returns text
as $$
declare
info_out test1%rowtype; --info_out为test1的行类型
begin
select * from test1 where id = id_in into info_out;
return info_out.info;
end;
$$ language plpgsql;
指定查询:
postgres=# select find_info(2);
find_info
-----------
b
(1 row)
可以看出在find_info函数中的返回类型为text,所以在函数的块中返回也必须为text,这里返回的是info_out.info对应表test1中的info类型。
返回一个记录(RECORD),记录相当于行类型变量,但是没有预定义的结构,所以返回的记录可以代替指定的rowtype类型,代码如下:
create or replace function test4() returns test1 --注意这里的test1是一个表的定义类型
as $$
declare
var record; --声明一个记录
begin
select * from test1 into var;
return var;
end;
$$ language plpgsql;
在上面代码中,returns声明的是一个表test1类型,但是返回的是一个记录,说明记录可以用于代替rowtype类型。
如果声明中retures record,在查找命令中可以给查找的记录重命名,只有record才能重命名:
create or replace function test12(int) returns record
as $$
declare
var record;
myid alias for $1; --使用函数参数时最好给参数声明alias for
begin
select * from test1 where id=myid into var;
return var;
end;
$$ language plpgsql;
使用查询结果如下:
select * from test12(1) as(myid int, myinfo text);
myid | myinfo
------+--------
1 | a
(1 row)
但是使用select * from test12(1);会报错。
RETURN NEXT
通常return next返回的是一个结果集(setof sometype),return next多应用与循环语句中,在循环语句中将返回的结果存储并累加,结果集最终被建立起来。示例如下:
create or replace function test0() returns setof test1
as $$
declare
var record;
t_sql text:='select * from test1';
begin
for var in execute t_sql loop --execute执行动态命令
return next var;
end loop;
end;
$$ language plpgsql;
最终的结果为:
postgres=# select test0();
test0
-------
(1,a)
(2,b)
(2 rows)
边栏推荐
猜你喜欢
随机推荐
关系型数据库-MySQL:体系结构
(十六)图的基本操作---两种遍历
flink-sql大量使用案例
JS深复制对象方法(深拷贝)
Kubernetes基本入门-集群资源(二)
剑指 Offer 2022/7/1
纳米级完全删除MYSQL5.7以及一些吐槽
Kubernetes集群安装
flink-sql查询配置与性能优化参数详解
使用express-jwt第三方包报错TypeError: expressJWT is not a function
flink问题整理
箭头函数的使用
进入古诗文网站个人中心,绕过登录
【树 图 科 技 头 条】2022年6月28日 星期二 伊能静做客树图社区
NFT市场可二开开源系统
k9s-终端UI工具
webrtc中的视频编码(一) 视频编码模块轮廓
iptables防火墙
剑指 Offer 2022/7/4
ISCC-2022