source

INSERT/UPDATE를 위해 Oracle SQL의 MERGE 문에 조건 추가

manysource 2023. 6. 19. 21:42

INSERT/UPDATE를 위해 Oracle SQL의 MERGE 문에 조건 추가

table target_table에 RECORDS를 삽입/업데이트해야 합니다.이러한 레코드는 source_table 하나로 제공됩니다.

업데이트/target_table 삽입을 위해 MERGE를 사용하고 있습니다.

MERGE
   INTO  target_table tgt
   USING source_table src
   ON  ( src.column1 = tgt.column1 and
         src.column2 = tgt.column2)
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4   
WHEN NOT MATCHED
   THEN
INSERT ( tgt.column1,
         tgt.column2,
         tgt.column3,
         tgt.column4 )
VALUES ( src.coulmn1,
         src.coulmn2,
         src.coulmn3,
         src.coulmn4);

업데이트 시 구체적인 조건을 추가하고 싶습니다.

IF target_table.column3 in (val1','val2)

업데이트만 있어야 하고, 그렇지 않으면 업데이트나 삽입이 없어야 합니다.

간단히 추가할 수 있습니다.WHERE에 대한 조항.UPDATE오라클 문서에 자세히 나와 있습니다.

따라서 귀하의 경우 다음과 같이 표시되어야 합니다.

...
WHEN MATCHED
THEN
   UPDATE
   SET   tgt.column3= src.column3,
         tgt.column4 = src.coulmn4
   WHERE tgt.column3 IN (val1, val2) 
WHEN NOT MATCHED
...

대신 아래와 같이 해보십시오.

MERGE
INTO  target_table tgt
USING source_table src
ON  (src.column1 = tgt.column1)
WHEN MATCHED
THEN
UPDATE
SET   tgt.column3= src.column3,
     tgt.column4 = src.coulmn4  
WHERE src.column1 = tgt.column1 and
     src.column2 = tgt.column2
WHEN NOT MATCHED
THEN
INSERT ( tgt.column1,
     tgt.column2,
     tgt.column3,
     tgt.column4 )
VALUES ( src.coulmn1,
     src.coulmn2,
     src.coulmn3,
     src.coulmn4);

언급URL : https://stackoverflow.com/questions/14519933/adding-conditions-in-merge-statement-in-oracle-sql-for-insert-update