请教一个存储过程怎么写
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;