Sql Oracle 11G通过表大容量插入/更新创建循环和触发器
甲骨文11G 顶点4.2.6 下面为每个工程师(:ENG_ID)APEX(表单字段)创建2年工作日志。但现在需要为另外250-500名工程师添加工作日志。 如何循环使用现有员工的每个:ENG_ID和新员工的触发器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)
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-添加了触发器定义。