banner
李大仁博客

李大仁博客

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

PostgreSQLを使用して、PL/SQLとカーソルを利用して日付ごとにバッチ処理を実行する。

既存の DWH システムは、日ごとにデータテーブルを作成するため、定期的なメンテナンスが煩雑になっています。たとえば、毎月末には当月に生成された一時テーブルをアーカイブする必要があります。

方法 1. SQL をバッチ生成し、固定の日付値で複数の SQL を生成します。SQL の生成方法はさまざまですが、すべての SQL が正しいかどうかを確認する必要があります。

方法 2. PL/SQL 関数を作成し、カーソルを使用してバッチ実行します。

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
---------------------------------------
-- 任意のロジック、または他の関数の呼び出し
---------------------------------------
buffer:= buffer || to_char(var_day,'yyyyMMdd');
else
exit;
end if;
end loop; -- ループを終了
close cur_date; -- カーソルを閉じる
return buffer;
end
$ language plpgsql;

関数を実行する

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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。