ホームページ  >  記事  >  php教程  >  PostgreSQL ストアド プロシージャの例:

PostgreSQL ストアド プロシージャの例:

WBOY
WBOYオリジナル
2016-06-21 09:09:13975ブラウズ

ストアドプロシージャ

要件:
バッチ処理には次の条件が与えられます
- 開始日時
- 繰り返し間隔 (分)
- 繰り返し回数
スケジュール内で繰り返し放送される番組をスケジュールする必要があります (例: 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 ins_endtime := timestamp_pl_span(ins_starttime,duration_min || ''mins'');
Starttime := timestamp_pl_span(ins_starttime ,period_min || ''mins'');
co_schedule 値に挿入(prog_id,ins_starttime,ins_endtime);
i := i+1;
ループ終了;
if i return false;
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 であることについては、関数が値を返さないようにする方法がわからないためです。改善を待っています。






声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。