Оператор слияния SQL с несколькими вставками не является опцией

Итак, продолжение другого вопроса...

У меня есть объединение, задача которого состоит в том, чтобы создать строки соединительной таблицы из существующей таблицы, которая может представлять только 1-1 соединение между сущностями (PROJECT), и из таблицы, которая может представлять N-1 соединение (рабочий), в которой находится таблица соединения (PROJECT-WORKER), у каждого проекта должны быть выделенные лидеры, и у каждого работника должен быть проект, но теперь у меня должно быть nn-соединение... Это слияние сделало бы работу:

Но, к сожалению, multiple matched then insert Ветка не является "особенностью" в SQL, как я могу решить эту проблему. Оригинальный запрос ---)

MERGE INTO WORKERPROJECT TARGET
USING (SELECT distinct
               w.worker_id,
               w.worker_type,
               w.project_id worker_project_id, 
               p.project_id project_project_id,
               p.dedicated_project_leader,
               p.dedicated_lead_developer,
               p.dedicated_lead_consultant,
               p.dedicated_supervisor
       from WORKER w 
       join PROJECT p on w.project_id = p.project_id
      ) SOURCE
   ON (SOURCE.worker_type is null)
 WHEN NOT MATCHED THEN INSERT (TARGET.FK_WORKER_ID, TARGET.FK_PROJECT_ID,TARGET.IS_ACTIVE,POSITION) 
  VALUES (SOURCE.WORKER_ID,SOURCE.worker_project_id,'ACTIVE',SOURCE.worker_type);
 WHEN NOT MATCHED THEN INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION)
  VALUES (SOURCE.dedicated_project_leader,SOURCE.project_project_id,'ACTIVE','PROJECTVEZETŐ');
 WHEN NOT MATCHED THEN INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION)  
  INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION) VALUES (SOURCE.dedicated_lead_developer,SOURCE.project_project_id,'ACTIVE','FEJLESZTŐVEZETŐ');
 WHEN NOT MATCHED THEN INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION)
  INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION) VALUES (SOURCE.dedicated_lead_consultant,SOURCE.project_project_id,'ACTIVE','KONZULENSVEZETŐ');
 WHEN NOT MATCHED THEN INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION)
  INSERT (FK_WORKER_ID, FK_PROJECT_ID,IS_ACTIVE,POSITION) VALUES (SOURCE.dedicated_supervisor,SOURCE.project_project_id,'ACTIVE','SUPERVISOR');

2 ответа

Решение

На самом деле вы можете. Благодаря insert all http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm

Если вам нужно выполнить множественную вставку с помощью слияния, добавьте столбцы из другой таблицы в начальный выбор. Что-то вроде этого:

`MERGE INTO regional_dummy a USING (SELECT c.ID as IDNO FROM   region_country c    WHERE c.parent_id = '2' ) b ON ('true' = 'false') --WHEN MATCHED THEN UPDATE <TODO> WHEN NOT MATCHED THEN   INSERT      (       id,     REGIONAL_userid,     REGIONAL_NAME ,    REGIONAL_EMAIL ,    CREATE_DATE ,    CREATED_BY ,    REGION_ID,    COUNTRY_ID,    PRODUCT_ID,    ACTIVE,    REPLACE_FLAG0    )0    VALUES    (      REGIONAL_SEQ.nextval,  '12345rg',  'userName',  'userEmailId',  sysdate,  'rgrover0',  '2',  b.IDNO,  'm_product_region',  'Y' ,  'N'   );`
Другие вопросы по тегам