2017-08-04 152 views
0

我以前從來沒有腳本,我在工作中一直負責想出以下的腳本:插入記錄

我們有一個表「 WRCF_Day」。此表的目的是列出DATE_HIRED和DATE_END之間的所有機制的每一天。因此,Mech1於2017年1月1日被聘用,並於2017年7月5日離職,這兩個日期之間的每個日期都會有個人記錄。這和其他一些附加功能可以讓我們看到誰計劃工作幾天,而不管他們是否及時輸入或不輸入其他無關的表格。所有Mechs列表,包括DATE_HIREd和DATE_END字段,處於活動狀態和非活動狀態,在表格「SD_CF」中。

我們需要在過去30天內刪除的記錄,然後在更新的記錄插入,所以我們可以解釋的變化,如員工被聘用或在該期限內離開。

我已經腳本刪除記錄過去30天,都會響起「DATE_ASSIGNED」,這是日期字段名。要插入的記錄,我的上司和我的腳本是:

DECLARE 
    CURSOR c_cf IS SELECT b.CF_ID FROM AFM_PHILADELPHIA.SD_CF b 
        WHERE b.DATE_END > trunc(sysdate-30) OR b.DATE_END is null; 
    r_cf c_cf%ROWTYPE; 
BEGIN 
    FOR i in 1..30 LOOP 
     OPEN c_cf; 
     LOOP 
      FETCH c_cf INTO r_cf; 
      EXIT WHEN c_cf%NOTFOUND; 
      INSERT INTO AFM_PHILADELPHIA.SD_WRCF_DAY a (CF_ID, DATE_ASSIGNED) 
VALUES (r_cf.CF_ID, sysdate-i); 
     END LOOP; 
     CLOSE c_cf; 
    END LOOP; 
END; 

我得到的「匿名塊已完成」,並沒有記錄已經被插入到WRCF_DAY表中的結果。

如果我們在最近30天內沒有持續重新插入,那麼如果有人在該時間段內離開並且將繼續歸因於他們可以工作,即使他們已經離開或不離開,也不會更新表格包括新員工。

實施例:機甲1被僱用17年1月1日和表顯示了他17年1月1日和當前日期之間的每一個單獨的日期。 Mech1實際上離開了6/30/17。這將在DATE_END下的「SD_CF」中更新。但是,「WRCF_DAY」將繼續爲每個日期生成一條新記錄,因爲它尚未使用新的DATE_END進行更新。因此,在刪除之前,表格會在1/1/17和7/13/17之間顯示Mech 1記錄,最後30個記錄會被刪除,然後我們要重新插入DATE_END大於過去30天的記錄,因此它將反映他離開並僅在1/1/7和6/30/17之間顯示記錄的事實。

人們不斷地來來去去,我們需要相應地更新表,並在一次有大約400名機械師一般,所以腳本需要通過每個機械運行在「SD_CF」確定爲自己的DATE_HIRED或DATE_END符合我們的參數,然後將適當數量的記錄插入「WRCF_Day」。

我希望這是有道理的。任何幫助將是偉大的!如果有更好的腳本在另一個表格中插入基於參數的記錄,我可以使用其他選項。

回答

0

沒有必要的遊標,循環等,爲你的情況。只需在SQL中使用CONNECT BY LEVEL加入日期生成器,即可將插入內容寫入表中。

INSERT INTO AFM_PHILADELPHIA.SD_WRCF_DAY a 
    (CF_ID, DATE_ASSIGNED 
) 
SELECT b.CF_ID, 
    dates.dte DATE_ASSIGNED 
FROM AFM_PHILADELPHIA.SD_CF b , 
    (SELECT SYSDATE -30 + LEVEL dte FROM DUAL CONNECT BY LEVEL < 30 
) dates 
WHERE b.DATE_END > TRUNC(sysdate-30) 
OR b.DATE_END IS NULL; 
+0

所以我在SQL Developer中運行它,它成功輸出,告訴我插入了57913行。然而,當我在MS Access檢查表,沒有新的記錄已經在最近30天添加,然後MS接入提出了關於粘貼錯誤,進入DATE_ASSIGNED,並創建了一個新的表名爲粘貼錯誤和表內是上面的代碼。所以我不知道發生了什麼...... – Casey

+0

MS訪問應該是一些問題。檢查這個環節,如果可以解決:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_access-mso_other/table-paste-errors-created/54d2d157-a77b-e011-9b4b-68b599b31bf5。另外,既然你在SQL開發者中說它有'57913行插入',你可以從sql開發者查詢同一個表並檢查是否所有預期的最近記錄都被插入了? –

+0

在過去30天內沒有最近的記錄插入表中。我無法分辨哪個57913行已被插入,但它們不是最新的。 – Casey