3

だから、別の質問の続き...

エンティティ間の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');
4

2 に答える 2

3

実際にできます。http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#i2095116に感謝しますinsert all

于 2013-01-22T10:12:13.523 に答える
0

マージを使用して複数の挿入を実行する必要がある場合は、異なるテーブルの列を最初の選択に追加します。このようなもの :

`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)
VALUES    (REGIONAL_SEQ.nextval,'12345rg','userName','userEmailId',sysdate,  'rgrover0','2',b.IDNO,'m_product_region','Y' ,'N');`
于 2018-06-19T07:10:35.120 に答える