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);
非常感谢
答案 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;
祝你好运。