Heim > php教程 > php手册 > 一个PostgreSQL存储过程的例子:

一个PostgreSQL存储过程的例子:

WBOY
Freigeben: 2016-06-21 09:09:13
Original
1009 Leute haben es durchsucht

存储过程

需求:
    给出如下条件进行批处理编排
    - 开始日期时间
    - 重复间隔(分钟)
    - 重复次数
    要求在档期内重复安排节目播出, 比如: 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,是因为我不知道如何让函数不返回值。等待改进。

 



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage