您现在的位置是:首页 > 博客网站制作 > 个人博客搭建个人博客搭建
PostgreSQL存储过程循环调用方式
杨青青2022-02-20【个人博客搭建】人已围观
简介这篇文章主要介绍了PostgreSQL存储过程循环调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧需求描述碰到需求,需要往表里插入5万条数据,打算使用存
这篇文章主要介绍了PostgreSQL存储过程循环调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
需求描述
碰到需求,需要往表里插入5万条数据,打算使用存储过程,但是postgres数据库没有建存储过程的SQL,所以使用函数来实现.
表数据结构完整性要求一次插入两条记录,两条记录相互外键约束,record1的partner_id字段值是record2的主键id的值,record2的partner_id字段值是record1的主键id的值.
实现
create
orreplacefunctioncreatData()returnsbooleanas$BODY$
declareiiinteger;
declareid1integer;
declareid2integer;
begin
ii=1;
id1=nextval('seq_table');
id2=nextval('seq_table');
FORiiIN1..50000LOOP
insert
into
table1
values(
id1,
10,
10250,
5001,
'2017-08-0714:00:00',
'2017-08-0715:00:00',
id2,
true,
864,
16950,
0,
0,
0,
null,
20,
null,
18050,
'2017-08-0713:55:08',
18051,
'2017-08-0713:57:28',
false,
401,
10,
null,
null,
null,
'DA-HZ001000003',
'2017-08-0713:54:08',
'2017-08-0713:57:28',
10251
);
insert
into
table1
values(
id2,
10,
10251,
5001,
'2017-08-0714:00:00',
'2017-08-0715:00:00',
id1,
true,
864,
16950,
0,
0,
0,
null,
20,
null,
18050,
'2017-08-0713:55:08',
18051,
'2017-08-0713:57:28',
false,
401,
10,
null,
null,
null,
'DA-HZ001000003',
'2017-08-0713:54:08',
'2017-08-0713:57:28',
10250
);
endLOOP;
returntrue;
end;
$BODY$LANGUAGEplpgsql;
问题
这样子插入只能插入一次,因为取得序列值的地方在for循环的外面,id的值不会随着循环再赋值,主键冲突.
办法
想到可以再对函数进行循环,于是再写一个函数循环执行上一个函数,去掉上个函数中的for循环语句FORiIN1..500000LOOP和endLOOP;
再写一个下面函数循环执行函数1
createorreplacefunctionloopCreate()
returnsvoidas
$BODY$
beginforiin1..50000LOOP
PERFORMcreatData();
endLOOP;
end;
$BODY$
LANGUAGE'plpgsql'VOLATILE;
执行函数
1select*fromloopCreate()astab;
好了,完成,10万条数数据秒插,2.1秒.
PS:CSDN的markdown编辑器真的很难用,文字稍微长一点就卡,而且换行经常自动调跳回上一行,无奈,现在都是直接在别的地方写好粘贴回来…
补充:postgresql存储过程中遍历的一个小问题
问题
想实现这种功能,就是forrin后面的sql语句是一个变量,要把以下代码修改一下
"sqltext"='select"ID","ZONENAME"from"ZONE_INFO"where"ID"<>0';
forrin"sqltext"
loop
returnnextr;
endloop;
解决方法:
sqltext='select"ID","ZONENAME"from"ZONE_INFO"where"ID"<>0';
forrinexecutesqltext
loop
returnnextr;
endloop;
Tags:
很赞哦! ()
相关文章
随机图文
个人博客模板《绅士》后台管理
个人博客模板《绅士》后台管理操作文档。首先感谢您购买本次服务,网站已经安装,并且代码调试完毕,这份操作文档,会帮助你更快的熟悉后台,认真看文档,会取得事半功倍的效果。当然,以下文档里,有任何不便修改的,都可以随时找我修改!做个人博客如何用帝国cms美化留言增加头像选择
帝国cms的留言板系统很简单,用户名,邮箱,电话,没有头像显示,如果要增加头像选择,而又不增加表或者字段的情况下,选择改用其中一个字段,比如电话这个,修改一下即可。帝国cms如何自定义留言以及评论样式
在帝国cms自带的评论和留言系统的功能上,简单修改一下它的样式,就能美美的调用出畅言一样的效果了。七夕情人节,网页素材收集
七夕情人节到啦,青于蓝给大家收集了一些关于七夕情人节的素材,包括七夕情人节的背景图,七夕情人节的透明png图片,可以用来做七夕情人节的产品宣传,当然还可以拿去做个漂亮的P图给心仪的女孩子表白,拿去哦,不谢不谢!