一个语句的拼写

来源:互联网 发布:mac 五笔输入法 编辑:程序博客网 时间:2024/04/29 20:50

请教一个存储过程怎么写

主表
route_no  period_st  period_end  head_way

A50       8:00        9:00        15       (表示8点到9点之间每15分钟发一趟车)
A50       9:00        11:00       30       (表示9点到11点之间每30分钟发一趟车)
A30       7:00        8:00         50       (表示7点到8点之间每50分钟发一趟车)


route_no表示车班次的号 varchar
period_st 表示某段时间的开始 date
period_end表示某段时间的结束 date
head_way表示多久发一趟(存的是分钟)   number

想分解成下面的子表,存储过程应该怎么写,要求速度可以快一点。。
子表

route_no  period_st  period_end  

A50       8:00        8:15                  (每条记录表示一趟车的发车时间)由主表的每条记录的  period_st开始  
A50       8:15        8:30                    累计head_way,直到发车的时候超过period_end 的时间就终止,
A50       8:30        8:45                    去到主表的下一条记录)
A50       8:45        9:00
A50       9:00        9:30
A50       9:30        10:00      
A50       10:00       10:30      
A50       10:30       11:00      
A30       7:00        7:50      
A30       7:50        8:40

 

 

 

create table route_schedules (
    route_no varchar2(10)
   ,period_st  date
   ,period_end date
   ,head_way   number
   );


INSERT INTO route_schedules values('A50',to_date('2008090108:00','yyyymmddhh24:mi'),to_date('2008090109:00','yyyymmddhh24:mi'),  15 );
INSERT INTO route_schedules values('A50',to_date('2008090109:00','yyyymmddhh24:mi'),to_date('2008090111:00','yyyymmddhh24:mi'),  30 );
INSERT INTO route_schedules values('A30',to_date('2008090107:00','yyyymmddhh24:mi'),to_date('2008090108:00','yyyymmddhh24:mi'),   50);

SELECT route_no,period_st+(N-1)*head_way/(24*60),period_st+N*head_way/(24*60)
  FROM route_schedules
      ,(SELECT LEVEL N FROM DUAL CONNECT BY LEVEL<=1000)
WHERE (period_end-period_st)*24*60/head_way>=N;