Oracle 11G创建循环并触发表批量插入/更新

时间:2014-11-03 16:21:40

标签: sql oracle triggers oracle11g

Oracle 11G

Apex 4.2.6

下面的

为每个工程师创建一个2年的工作日志(:ENG_ID)APEX(表单字段)。但现在需要为另外250-500名工程师添加工作日志。 我如何循环每个:现有员工的ENG_ID和新

的触发器
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); 

非常感谢

1 个答案:

答案 0 :(得分:1)

鉴于ENG表具有所有ENG_ID值且ALL_DATES具有所有日期值,您可以执行以下操作:

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;

祝你好运。