ストアドプロシージャ
要件:
バッチ処理には次の条件が与えられます
- 開始日時
- 繰り返し間隔 (分)
- 繰り返し回数
スケジュール内で繰り返し放送される番組をスケジュールする必要があります (例: 2003.01)。 01 08:00 240秒ごと 1分に1回、計100回放送
データベーステーブル(CO_SCHEDULE)
------------------------ ------
N_PROGID INT
DT_STARTTIME TIMESTAMP
DT_ENDTIME TIMESTAMP
ストアド プロシージャの実装:
create table co_schedule(n_progid int,dt_starttime timestamp,dt_endtime timestamp);
//作成関数:
関数 add_program_time を作成する(int4,timestamp,int4,int4 ,int4) は bool を '
declare
$1 の場合は prog_id エイリアス;
$3 の場合は period_min エイリアス;
$4 の場合は period_min エイリアス;
stop_times のエイリアスは $5 ;
i int;
starttime timestamp; ins_starttime timestamp;
ins_endtime timestamp;
begin
starttime :=$2;
i := 0;
while i
Starttime := timestamp_pl_span(ins_starttime ,period_min || ''mins'');
co_schedule 値に挿入(prog_id,ins_starttime,ins_endtime);
i := i+1;
ループ終了;
if i
else
return true;
End if;
end;
' language 'plpgsql';
//実行関数:
select add_program_time(1,'2002-10-20 0:0:0',' 5','60', '5');
//結果の表示: select * from co_schedule;
n_progid dt_starttime dt_endtime
----------+--------- ----- ----------+--------------------------
2002-10-20 00: 00:00+08 | 2002-10-20 00:05:00+08
1 | 2002-10-20 01:00:00+08
1 | -10-20 02: 00:00+08 | 2002-10-20 02:05:00+08 | 2002-10-20 03:05:00 +08
1 | 2002 -10-20 04:00:00+08 | 2002-10-20 04:05:00+08
ps:
1 がデータベースにロードされます。そうでない場合は、
su - postgres
createlang plpgsql dbname
2. 戻り値の型が bool であることについては、関数が値を返さないようにする方法がわからないためです。改善を待っています。