banner
李大仁博客

李大仁博客

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

PostgreSQL使用PL/SQL和游標實現按日期批量執行

現有的 DWH 系統是按天創建數據表的,使得定期維護變得麻煩,例如每個月底需要將按當月產生的臨時表存檔。

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。