2017-09-07 13 views
0

아래 병합 쿼리를 사용하여 날짜를 업데이트하고 perfromance 문제에 대해 ROWID 논리를 사용하고 있습니다.업데이트를 사용하여 병합 삽입 새 행

하지만 어떻게 든 새로운 행을 삽입합니까? 난 그냥 TEST_GRP 테이블을 업데이 트하고 싶지 않아 새로운 행의 삽입 싶습니다.

나는 처음으로 로직을 사용하고 있는데 실제로 새로운 행을 삽입하거나 그냥 테이블을 업데이트하는지 잘 모르겠습니다.

MERGE INTO TEST_GRP tgt 
    USING (SELECT ID, 
       ROWID r_id, 
       row_number() over (partition by ID ORDER BY DT_DATE) rn 
     FROM TEST_GRP) src 
    ON (tgt.rowid = src.r_id AND src.rn = 1) 
WHEN MATCHED THEN 
    UPDATE SET DT_DATE = to_date('01.01.2017', ''dd.mm.yyyy'') 
    WHERE DT_DATE != to_date('01.01.2016', ''dd.mm.yyyy'') 
    and DB_NAME = 'ARD'; 
+0

업데이트에서 where 절과 다른 날짜가 왜 궁금합니다. "01.01.2016 일이 아니면 01.01.2017로 업데이트하십시오." –

답변

1

당신은 docs에 명시된 바와 같이 merge 문에 삽입 절을 추가 할 필요가 없습니다 : 당신은 그 자체로 또는 merge_insert_clause와 함께이 절을 지정할 수 있습니다 ...

merge_update_clause

코드에 삽입 코드가 없으므로 삽입되지 않습니다.

merge_insert_clause :

2

그것은 문제없이 행을 업데이트하고 새로운 행을 삽입하지 않습니다.

UPDATE statual probalie에서 SET 마스크 SET DT_DATE = to_date ('01 .01.2017 ','dd.mm.yyyy '') DT_DATE! = to_date ('01 .01.2016 ' , ''dd.mm.yyyy '')