2014-11-03 1 views
0

Oracle 11GOracle 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

Есть ли где-нибудь таблица, в которой есть все ENG_ID? –

+0

Да eng table with eng_id и имена –

ответ

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); 

Делитесь и наслаждайтесь.


EDIT

Похоже, что вы пытаетесь сделать, это добавить новые строки MD_TS_MAST, когда новый инженер добавляется к ЭСН. В этом случае триггер ON ВСТАВИТЬ на MD_TS_MAST, казалось бы лучшим решением:

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. –

+0

@jasesykes - добавлено определение триггера. –

+0

Огромное спасибо –

Смежные вопросы