postgresql动态游标使用案例

CREATE or REPLACE FUNCTION insert_p_date() RETURNS text as ```

$$
DECLARE
sql_string text;
sdate timestamp without time zone;
ldate timestamp without time zone;
_wtid integer;
--一段时间内每个月第一天
cur1 cursor for select date(zz) from generate_series(date_trunc('month',to_date('20171001','yyyymmdd')),date_trunc('month',to_date('20180401','yyyymmdd')),'1 month') as tt(zz);
curs2 refcursor;
BEGIN
--打开
open cur1;
loop
fetch cur1 into sdate;
-- 假如没有数据,结束循环
Exit when NOT found;
--一段时间内的最后一个月的最后一天
select (date_trunc('month',sdate) + INTERVAL '1 MONTH - 1 day') into ldate;
--上个月最后一天
--select date_trunc('day', date_trunc('month',sdate)) - interval '1 day' into ldate;
--断点抛出一个月第一天
raise notice 'sdate==================================================================%', sdate;
--定义一个月内的内的所有单台设备
open curs2 for select distinct wtid from statisticdata_bak where rectime between sdate and ldate;
loop
--取记录
fetch curs2 into _wtid;
-- 假如没有检索到数据,结束循环
Exit when NOT found;
--抛出设备信息
raise notice '_wtid=%', _wtid;
--执行数据导入按照设备每个月
sql_string := 'insert into statisticdata select * from statisticdata_bak where wtid='||_wtid||' and rectime between '''||sdate||''' and '''||ldate||''';';
execute sql_string;
raise notice '执行完成=%', _wtid;
end loop;

end loop;
--关闭游标1
close cur1;
close curs2;
--返回结果
RETURN '导入成功!';
END;
$$
LANGUAGE plpgsql;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值