這是presentation
表:插入使用子查詢中加入基於日兩個日期之間的日期[的Oracle 11g]
ID PRESENTATIONDAY PRESENTATIONSTART PRESENTATIONEND PRESENTATIONSTARTDATE PRESENTATIONENDDATE
622 Monday 12:00:00 02:00:00 01-05-2016 04-06-2016
623 Tuesday 12:00:00 02:00:00 01-05-2016 04-06-2016
624 Wednesday 08:00:00 10:00:00 01-05-2016 04-06-2016
625 Thursday 10:00:00 12:00:00 01-05-2016 04-06-2016
我想在schedule
表中插入availabledate
。這是我當前的查詢:
insert into SCHEDULE (studentID,studentName,projectTitle,supervisorID,
supervisorName,examinerID,examinerName,exavailableID,
availableday,availablestart,availableend,
availabledate) //PROBLEM STARTS HERE
values (?,?,?,?,?,?,?,?,?,?,?,?));
值availabledate
是基於exavailableID
檢索。例如,如果exavailableID
= 2,則availableday
=星期一,availablestart
= 12pm,availableend
= 2pm。
日期只會在PRESENTATIONSTARTDATE
到PRESENTATIONENDDATE
之間從presentation
表中選擇。
在presentation
表,它將匹配PRESENTATIONDAY
,PRESENTATIONDATESTART
和PRESENTATIONDATEEND
與availableday
,availablestart
和availableend
得到所有可能的日期列表。
這是查詢以獲得基於特定日子的所有可能的日期列表:
select
A.PRESENTATIONID,
A.PRESENTATIONDAY,
A.PRESENTATIONDATESTART+delta LIST_DATE
from
PRESENTATION A,
(
select level-1 as delta
from dual
connect by level-1 <= (
select max(PRESENTATIONDATEEND- PRESENTATIONDATESTART) from PRESENTATION
)
)
where A.PRESENTATIONDATESTART+delta <= A.PRESENTATIONDATEEND
and
a.presentationday = trim(to_char(A.PRESENTATIONDATESTART+delta, 'Day'))
order by 1,2,3;
這個查詢的結果是:
622 Monday 02-05-2016 12:00:00
...
622 Monday 30-05-2016 12:00:00
623 Tuesday 03-05-2016 12:00:00
...
623 Tuesday 31-05-2016 12:00:00
624 Wednesday 04-05-2016 12:00:00
...
624 Wednesday 01-06-2016 12:00:00
625 Thursday 05-05-2016 12:00:00
...
625 Thursday 02-06-2016 12:00:00
它會自動從SELECT
查詢指定日期是插入schedule
表中。但是,每個日期只能使用4次。一旦達到4次,就會進入下一個日期。例如,如果週一,'02 -05-2016' 到'09 -05-2016'
我怎麼能企業這兩個查詢(INSERT
和SELECT
)有這樣的結果:
StudentName projectTitle SupervisorID ExaminerID availableday availablestart availableend availabledate
abc Hello 1024 1001 MONDAY 12.00pm 2.00pm 02-05-2016
def Hi 1024 1001 MONDAY 12.00pm 2.00pm 02-05-2016
ghi Hey 1002 1004 MONDAY 12.00pm 2.00pm 02-05-2016
xxx hhh 1020 1011 MONDAY 12.00pm 2.00pm 02-05-2016
jkl hhh 1027 1010 MONDAY 12.00pm 2.00pm 09-05-2016
try ttt 1001 1011 MONDAY 12.00pm 2.00pm 09-05-2016
654 bbb 1007 1012 MONDAY 12.00pm 2.00pm 09-05-2016
gyg 888 1027 1051 MONDAY 12.00pm 2.00pm 09-05-2016
yyi 333 1004 1022 TUESDAY 12.00pm 2.00pm 03-05-2016
fff 111 1027 1041 TUESDAY ..
ggg 222 1032 1007 TUESDAY .. .. .. ..
hhh 444 1007 1001 TUESDAY 12.00pm 2.00pm 03-05-2016
and so on :)
總之,我想用presentation
表的日期列表根據當天,開始時間和結束時間來插入查詢,每個日期只會用到4次。謝謝!
感謝您的時間@Dahamsta :)這個查詢如何幫助我只使用每個日期4次? – user6308605
對不起,我完全誤解了這個問題。我現在明白了。你可能要做的是在更新之前創建一個觸發器,如果在日程表中已經有四行帶有演示ID的話,那麼檢查並拋出一個錯誤。 – Dahamsta
我不明白觸發器級聯部分...至少有任何一般的例子? – user6308605