您的位置:首页 > 数据库

一个PostgreSQL存储过程的例子:

2012-07-17 11:03 411 查看
需求:

给出如下条件进行批处理编排

- 开始日期时间

- 重复间隔(分钟)

- 重复次数

要求在档期内重复安排节目播出, 比如: 2003.01.01 08:00 开始每隔240分钟播出一次, 一共播出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);

//创建函数:

create function add_program_time(int4,timestamp,int4,int4,int4) returns bool as '

declare

prog_id alias for $1;

duration_min alias for $3;

period_min alias for $4;

repeat_times alias for $5;

i int;

starttime timestamp;

ins_starttime timestamp;

ins_endtime timestamp;

begin

starttime :=$2;

i := 0;

while i<repeat_times loop

ins_starttime := starttime;

ins_endtime := timestamp_pl_span(ins_starttime,duration_min || ''mins'');

starttime := timestamp_pl_span(ins_starttime,period_min || ''mins'');

insert into co_schedule values(prog_id,ins_starttime,ins_endtime);

i := i+1;

end loop;

if i<repeat_times then

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

----------+------------------------+------------------------

1 | 2002-10-20 00:00:00+08 | 2002-10-20 00:05:00+08

1 | 2002-10-20 01:00:00+08 | 2002-10-20 01:05:00+08

1 | 2002-10-20 02:00:00+08 | 2002-10-20 02:05:00+08

1 | 2002-10-20 03:00: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.数据库一加载 plpgsql语言。如没有,

su - postgres

createlang plpgsql dbname

2.至于返回类型为bool,是因为我不知道如何让函数不返回值。等待改进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: