2011-11-12 19 views
0

所以我創建了一個用於我的大學課程作業的Oracle數據庫。現在我有一個名爲staff_allocations的表,它爲飛行表中的航班分配工作人員。oracle找到一個日期落入列表

CREATE TABLE FLIGHT (
    FLIGHT_ID NUMBER(11) PRIMARY KEY, 
    ROUTE_ID NUMBER(11) NOT NULL, 
    PLANE_ID NUMBER(11) NOT NULL, 
    PILOT_ID NUMBER(11) NOT NULL, 
    DEPARTURE_TIME TIMESTAMP NOT NULL, 
    ARRIVAL_TIME TIMESTAMP NOT NULL, 
    FREE_SEATS NUMBER (4) 
); 

CREATE TABLE STAFF_ALLOCATION (
    FLIGHT_ID NUMBER(11) NOT NULL, 
    EMPLOYEE_ID NUMBER(11) NOT NULL 
); 

現在航班表中的route_id引用了路線表。

CREATE TABLE ROUTE (
    ROUTE_ID NUMBER(11) PRIMARY KEY, 
    START_ID VARCHAR2(3) NOT NULL, 
    DESTINATION_ID VARCHAR2(3) NOT NULL, 
    TRANSIT_ID VARCHAR2(3), 
    IS_ACTIVE VARCHAR2(1), 
    DISTANCE NUMBER (8,2), 
    BASE_PRICE NUMBER (6,2) 
); 

地方開始編號,目的地ID和過境ID都指向不同的機場代碼(LHR,火腿等)

,所以我想做一個觸發器,它們將在staff_allocation插入之前弄清楚,工作人員是否被分配到另一班時間與新班機重疊的班機。此外,還必須檢查工作人員是否與飛行起源實際在同一個國家。

所以是這樣的:其航班工作人員被分配到已經

發現。 比較新的航班起飛時間和現有的航班起飛時間。 如果飛行時間不衝突,然後看看工作人員已經在新START_ID國

誰能幫我出兩個例子代碼或什麼我應該尋找指着我在正確的方向/使用?這是我第一次用oracle創建任何東西。

歡呼聲。

回答

1

第一次檢查很容易。如果您知道您正在修改的航班的起飛和着陸,則可以檢查是否存在另一個該員工的航班,其到達日期時間大於當前航班的出發日期,並且該航班的出發日期時間爲在當前航班到達日期之前。

如果這樣的航班存在,它與您當前的航班重疊。但這是Oracle的更多邏輯。

其他檢查比較困難(對於數據庫)。您必須爲特定員工找到最新抵達時間,並選擇到達國家作爲員工抵達的國家。 請注意,這是假設。有人可能以乘客身份回家,或乘公共汽車。此外,您需要確保每位員工都有起點。因此,無論你是否需要爲所有人的第一次飛行都允許所有事情,或者您必須向員工本身註冊國家。後一種解決方案沒有很好的「時間旅行」,只是一個固定的位置,並沒有告訴員工在某個日期的哪個地方。所以我只允許爲新員工分配任何分配,並且不要爲這個分配休息。

您將面臨的主要問題是您無法在同一張表上的行級觸發器中查詢表。因此,爲了解決這個問題,您必須記住插入的記錄並在插入觸發器後編寫一個表級別來執行檢查。

我想給你一些代碼,但人們總是告訴我,學生應該自己做。所以我會把實施留給你,而我要做自己的功課。 :)

-1

我想你知道觸發語法和pl/sql。

我建議您檢查dbms_output.put_line來幫助調試觸發器,或者使用支持步驟點的工具。

如果你想過度(雙關語幾乎沒有意圖),你應該檢查在你插入的那個之後已經存在的航班分配開始於插入的那個國家,否則它使3個航班無效。

你想插入航班B.航班A從美國到墨西哥,航班C從墨西哥到我們。然後,您將從墨西哥飛往危地馬拉的B航班。這是有效的,但打破航班C.

良好的航班。

相關問題