您现在的位置是:首页 > 博客网站制作 > 个人博客搭建个人博客搭建

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:

很赞哦! ()

文章评论

站点信息

  • 建站时间:2011年01月12日
  • 网站程序:帝国CMS7.5
  • 主题模板《今夕何夕》
  • 文章统计625篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们