您现在的位置是:首页 > 博客网站制作 > 心得笔记心得笔记
Postgresql 存储过程(plpgsql)两层for循环的操作
杨青青2022-02-20【心得笔记】人已围观
简介项目中遇到测试,需要造4500数据,而且需要分部门和日期,一个部门一天30条数据,剩下的铺垫数据可以一个部门一天100w左右数据,这里,每次变换部门,日期,需要操作至少300次,想到用存储过
项目中遇到测试,需要造4500数据,而且需要分部门和日期,一个部门一天30条数据,剩下的铺垫数据可以一个部门一天100w左右数据,这里,每次变换部门,日期,需要操作至少300次,想到用存储过程写一个函数进行
首先,了解存储过程的语法:
CREATE[ORREPLACE]FUNCTION
name([[argmode][argname]argtype[{DEFAULT|=}default_expr][,...]])
[RETURNSrettype
|RETURNSTABLE(column_namecolumn_type[,...])]
{LANGUAGElang_name
|WINDOW
|IMMUTABLE|STABLE|VOLATILE
|CALLEDONNULLINPUT|RETURNSNULLONNULLINPUT|STRICT
|[EXTERNAL]SECURITYINVOKER|[EXTERNAL]SECURITYDEFINER
|COSTexecution_cost
|ROWSresult_rows
|SETconfiguration_parameter{TOvalue|=value|FROMCURRENT}
|AS'definition'
|AS'obj_file','link_symbol'
}...
[WITH(attribute[,...])]
————————————————
CREATE[ORREPLACE]FUNCTION--创建一个函数,若有此函数,即取代重新创建name-------函数名称
RETURNS---函数返回类型
具体的函数声明,请参考[postgresql存储过程]
下面说我写的函数:
CREATEORREPLACEFUNCTION"xue"."insert_into_table"()
RETURNS"pg_catalog"."void"AS$BODY$
DECLAREtmpVARCHAR(1024);
DECLAREninteger;
DECLAREiinteger;
DECLAREinst_seq_noCURSORFOR
SELECTinst_seq_noFROMtwherenoin(
'111','22','223','33','4358',
'233','449','315','35335');
BEGIN
RAISENOTICE'------------start----------';
i:=30;
FORstmtINnoLOOP
n:=30;
FORnINn..iLOOP
insertintotest2(NO,
test_NO,TIME,USER_NO,SEQ_NO,
NAME,USER_NO1,USER_NAME,CODE,USER_NO2,OPROR_NAME,
REVIEW_TIME,DESC,
VAL1,VAL2,DATE,UPD_TIME,DEL_FLAG)values
(nextval('seq_test2'),n,'20190910',n,stmt.seq_no,n,n,n,n,n,n,'20190910','01','',n,n,'20190910',
'20190909','0');
ENDLOOP;
n=n+30;
i=i+30;
ENDLOOP;
RAISENOTICE'-----------finished---------';
END;
$BODY$
LANGUAGEplpgsqlVOLATILE
COST100`
很简单的逻辑,但是在修改了三四遍才实现,这个第二次写存储过程,很多语法不是很熟悉,要注意的如:
1.`变量声明要用DECLARE
2.``游标CURSOR的用法
3.for循环要在begin中执行,
4.循环中要用“:=”
补充:Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题
在postgresql中我们在执行存储过程中往往会使用select存储过程,但是如果存储过程中再调用存储过程时,就不能这样用了,应该用perform存储过程,可以去参考官方文档的说明
执行一个没有结果的表达式或者命令
有时候我们希望计算一个表达式或者一个命令,但是却丢弃其结果(通常因为我们经常调用一些存在有用的副作用但是不存在有用结果值的函数)。要在PL/pgSQL里干这件事,你可以使用PERFORM语句:
1PERFORMquery;
这条语句执行一个query并且丢弃结果。query的写法和你平常写SQLSELECT命令是一样的,只是把开头的关键字SELECT替换成PERFORM。PL/pgSQL的变量和平常一样代换到命令中。同样,如果命令生成至少一行,那么特殊的变量FOUND设置为真,如果没有生成行,则为假。
注意:我们可能希望没有INTO子句的SELECT也能满足这样的需要,但是目前可以接受的唯一的方法是PERFORM。
一个例子:
1PERFORMcreate_mv('cs_session_page_requests_mv',my_query);
Tags:
很赞哦! ()
相关文章
随机图文
asp如何加速网站打开的速度
技巧之一:提高使用Request集合的效率访问一个ASP集合来提取一个值是费时的、占用计算资源的过程。因为这个操作包含了一系列对相关集合的搜索,这比访问一个局部变量要慢得多。因此,如果打算在页面中多次使用从摄影作品中获取网页颜色搭配技巧
作为一个优秀、专业的网页设计师,首先要了解各种颜色的象征,以及不同类型网站常用的色彩搭配。色彩搭配看似复杂,但并不神秘。一般来说,网页的背景色应该柔和一些、素一些、淡一些,再配上深色的文字,使人看起来自然、舒畅。色彩是人的视觉最敏感的东西。主页的色彩处理得好,可以锦上添花,达到事半功倍的效果。优化404页面对SEO的影响以及设置404页面的好处
404页面是客户端在浏览网页时,服务器无法正常提供信息,或是服务器无法回应,且不知道原因。404错误信息通常是在目标页面被更改或移除,或客户端输入页面地址错误后显示的页面。设置404的好处1:引导用户不要关闭网站,增强用户体验。2:防止网站出现死链接Fieldset教你如何绘制带标题的表单框
一朋友问我像这样的表单样式是怎么实现的,我看到图,第一眼的印象应该是用图片来实现的,或者是用postion来定位实现的。本例演示如何在数据周围绘制一个带标题的框。