banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

PostgreSQL使用PL/SQL和游标实现按日期批量执行

现有的 DWH 系统的是按天创建数据表的,使得定期维护变得麻烦,例如每个月底需要将按当月产生的临时表 archive。

方式 1. 批量生成 SQL,按固定的日期值生成一堆 SQL,SQL 生成方法多样。但是需要确认全部 sql 是否正确。

方式 2. 编写 PL/SQL function,使用游标方式批量执行。

drop function fun_datecursor(from_date text,to_date text,cond text);
create or replace function fun_datecursor(from_date text,to_date text,cond text) returns text
as $
declare
cur_date refcursor;
buffer text := '';
var_day date;
begin
open cur_date for execute 'SELECT generate_series('''|| from_date ||'''::date,'''|| to_date ||'''::date,'''|| cond ||''')';
loop -- 开始循环
fetch cur_date into var_day; -- 将游标指定的值赋值给变量
if found then
---------------------------------------
-- 任意的逻辑,或调用其他 function
---------------------------------------
buffer:= buffer || to_char(var_day,'yyyyMMdd');
else
exit;
end if;
end loop; -- 结束循环
close cur_date; -- 关闭游标
return buffer;
end
$ language plpgsql;

执行 function

select fun_datecursor('2008-03-01','2008-03-31','1 day’);

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。