介绍
怎么在Postgresql存储过程中嵌套两层为循环?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
项目首先,了解存储过程的语法:
CREATE [,趁机;REPLACE ],函数 名字才能(,[[argmode]大敌;[argname] argtype [, {, DEFAULT |,=,} default_expr], [,,…],),) ,,,(RETURNSrettype ,,,,|,RETURNS TABLE (column_namecolumn_type (,,…),),) {才能LANGUAGElang_name ,,,|,窗口 | |,IMMUTABLE STABLE |,波动 ,,,|,nbsp;提醒NULL INPUT |, RETURNS NULL 提醒NULL INPUT |,严格 ,,,|,[],EXTERNAL , SECURITY INVOKER |, [], EXTERNAL , SECURITY 定义者 ,,,| COSTexecution_cost ,,,| ROWSresult_rows ,,,|,SETconfiguration_parameter {, TOvalue |, |=值,得到CURRENT } ,,,|,AS & # 39;定义# 39; ,,,|,AS & # 39; obj_file& # 39;,, & # 39; link_symbol& # 39; ,,},… ,,,(,WITH (属性(,,…),),) - - - - - - - - - - - - - - - - -
创建(或更换)函数——创建一个函数,若有此函数,即取代重新创建的名字- - - - - - -函数名称
返回——函数返回类型
具体的函数声明,请参考(postgresql存储过程)
下面说我写的函数:
CREATE 或是REPLACE FUNCTION “xue"干净insert_into_table" () ,RETURNS “pg_catalog" !”void" AS 身体美元美元 DECLARE tmp  VARCHAR (1024); DECLARE n 整数; DECLARE 小姐:整数; DECLARE inst_seq_no  CURSOR SELECT 才能;inst_seq_no 得到t where no 拷贝( & # 39;才能111 & # 39;& # 39;22 & # 39;& # 39;223 & # 39;& # 39;33 & # 39;& # 39;4358 & # 39; ,,& # 39;233 & # 39;& # 39;449 & # 39;& # 39;315 & # 39;& # 39;35335 & # 39;); 开始 RAISE 才能;NOTICE & # 39; - - - - - - - - - - - - - - - - - - - - - - -开始& # 39;; 小姐::=,才能30; FOR 才能;stmt 拷贝no 循环 ,,,n :=, 30; ,,,FOR n n . .小姐:拷贝LOOP ,,, ,,,,,insert into test2 (不, ,,,,,test_NO,时间,USER_NO, SEQ_NO, ,,,,,的名字,USER_NO1, USER_NAME,代码,USER_NO2, OPROR_NAME, ,,,,,,REVIEW_TIME DESC, ,,,,,,VAL1 VAL2,日期,UPD_TIME DEL_FLAG),值 ,,,,,(nextval (& # 39; seq_test2& # 39;), n, & # 39; 20190910 & # 39;, n, stmt.seq_no, n, n, n, n, n, n, & # 39; 20190910 & # 39;, & # 39; 01 & # 39;, & # 39; & # 39;, n, n, & # 39; 20190910 & # 39;, ,,,,,& # 39;20190909 & # 39;& # 39;0 & # 39;); ,,,,,最终获得循环; ,,,,,,n =, n + 30; ,,,,,小姐:=,+ 30; 最终获得才能;循环; RAISE 才能;NOTICE & # 39; - - - - - - - - - - -完成- - - - - - - - - - - - - - - - # 39;; 结束; 身体美元 ,LANGUAGE plpgsql 不稳定 ,COST 100年的
很简单的逻辑,但是在修改了三四遍才实现,这个第二次写存储过程,很多语法不是很熟悉,要注意的如:
1. '变量声明要用声明
2。“游标光标的用法
3.循环要在开始中执行,
4。循环中要用“:="
<强>补充:Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题强>
在Postgresql中我们在执行存储过程中往往会使用选择存储过程,但是如果存储过程中再调用存储过程时,就不能这样用了,应该用执行存储过程,可以去参考官方文档的说明
执行一个没有结果的表达式或者命令
有时候我们希望计算一个表达式或者一个命令,但是却丢弃其结果(通常因为我们经常调用一些存在有用的副作用但是不存在有用结果值的函数)。要在PL/pgSQL里干这件事,你可以使用执行语句:
PERFORM 查询;
这条语句执行一个查询并且丢弃结果。查询的写法和你平常写sql select命令是一样的,只是把开头的关键字选择替换成执行。PL/pgSQL的变量和平常一样代换到命令中。同样,如果命令生成至少一行,那么特殊的变量发现设置为真,如果没有生成行,则为假。
注意:我们可能希望没有到子句的选择也能满足这样的需要,但是目前可以接受的唯一的方法是执行。
一个例子:
PERFORM create_mv (& # 39; cs_session_page_requests_mv& # 39;,, my_query);