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’);

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.