繁体中文
设为首页
加入收藏
当前位置:PHP技术首页 >> 数据库相关 >> 一个PostgreSQL存储过程的例子:

一个PostgreSQL存储过程的例子:

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:15  文字大小:【】【】【
简介:需求:     给出如下条件进行批处理编排     - 开始日期时间     - 重复间隔(分钟)     - 重复次数     ...

需求:

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

- 开始日期时间

- 重复间隔(分钟)

- 重复次数

要求在档期内重复安排节目播出, 比如: 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

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

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,是因为我不知道如何让函数不返回值。等待改进。

责任编辑:admin
相关文章