2014-11-03 54 views
0

甲骨文11G的Oracle 11g創建循環和觸發雖然表批量插入/更新

的Apex 4.2.6

下面的每個工程師創建了2年的工作日誌(:ENG_ID)APEX(表單字段)。但現在需要爲另外250-500名工程師添加工作日誌。 我怎樣才能循環儘管每個:ENG_ID對現有員工及鑑於ENG表已全部ENG_ID值和ALL_DATES擁有所有的日期值,你可以做新的

merge INTO MD_TS_MAST D 
USING (SELECT :ENG_ID AS eng_id, 
      dt 
    FROM ALL_DATES) s 
ON (D.eng_id= s.eng_id AND d.ms_date = s.dt) 
WHEN NOT matched THEN 
INSERT (D.eng_id, 
     D.ms_date) 
VALUES (s.eng_id, 
     s.dt); 

非常感謝

+0

是否有一個表中有所有ENG_ID的表? – 2014-11-03 17:52:02

+0

是英與eng_id和名稱表 – 2014-11-03 17:58:42

回答

1

觸發例如:

MERGE INTO MD_TS_MAST d 
    USING (SELECT e.ENG_ID, 
       a.DT 
      FROM ENG e 
      CROSS JOIN ALL_DATES a) s 
    ON (d.ENG_ID = s.ENG_ID AND 
     d.MS_DATE = s.DT) 
    WHEN NOT MATCHED THEN 
    INSERT (ENG_ID, 
      MS_DATE) 
    VALUES (s.ENG_ID, 
      s.DT); 

分享和享受。


編輯

這聽起來像你試圖做的是添加新行,當一個新的工程師加入到ENG到MD_TS_MAST。在這種情況下,MD_TS_MAST上的ON INSERT觸發器似乎是最佳解決方案:

CREATE TRIGGER MD_TS_MAST_AI 
    AFTER INSERT ON MD_TS_MAST 
    FOR EACH ROW 
BEGIN 
    MERGE INTO MD_TS_MAST d 
    USING (SELECT :NEW.ENG_ID, 
        a.DT 
      FROM ALL_DATES a) s 
     ON (d.ENG_ID = s.ENG_ID AND 
      d.MS_DATE = s.DT) 
    WHEN NOT MATCHED THEN 
     INSERT (ENG_ID, 
       MS_DATE) 
     VALUES (s.ENG_ID, 
       s.DT); 
END MD_TS_MAST_AI; 

祝您好運。

+0

絕對完美非常感謝你。第二部分將創建一個觸發器,它將觸發上述腳本。問題在於如何將上面的腳本轉換爲觸發器,該觸發器取最後一個eng_id值。 – 2014-11-04 09:30:55

+0

@jasesykes - 添加了觸發器定義。 – 2014-11-04 11:26:02

+0

非常感謝 – 2014-11-13 11:47:10