Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle 11G通过表大容量插入/更新创建循环和触发器_Sql_Oracle_Triggers_Oracle11g - Fatal编程技术网

Sql Oracle 11G通过表大容量插入/更新创建循环和触发器

Sql Oracle 11G通过表大容量插入/更新创建循环和触发器,sql,oracle,triggers,oracle11g,Sql,Oracle,Triggers,Oracle11g,甲骨文11G 顶点4.2.6 下面为每个工程师(:ENG_ID)APEX(表单字段)创建2年工作日志。但现在需要为另外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)

甲骨文11G

顶点4.2.6

下面为每个工程师(:ENG_ID)APEX(表单字段)创建2年工作日志。但现在需要为另外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); 

非常感谢

鉴于ENG表格包含所有ENG_ID值,且所有日期都包含所有日期值,您可以执行以下操作:

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); 
分享和享受


编辑 听起来,当一名新工程师被添加到工程中时,您试图做的是将新行添加到MD_èu桅杆。在这种情况下,MD_èu桅杆上的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;

祝你好运。

有没有一张桌子上有所有的英文ID?是的,有英文ID和名字的英文桌子绝对完美,谢谢。第二部分是创建一个触发上述脚本的触发器。问题是如何将上述脚本转换为一个触发器,该触发器接受最后一个eng_id值。@jasesykes-添加了触发器定义。