MERGE INTO 등록할_테이블_명 TB_NM

  USING(SELECT USER_NO FROM USER_TABLE WHERE USER_NO = '001') U_TB --> 검색할 쿼리

  ON (TB_NM.USER_NO = U_TB.USER_NO)  --> INSERT, UPDATE 조건

    WHEN MATCHED THEN -- 조건에 일치할경우 이하의 쿼리 실행 (UPDATE)

        UPDATE

        SET TB_NM.USER_NO = '001',

                TB_NM.USER_NAME = '유저명'

    WHEN NOT MATCHED THEN --> 조건이 일치하지 않을경우 이하의 쿼리 실행 (INSERT) 

        INSERT (TB_NM.USER_NO, TB_NM.USER_NAME)

        VALUES ('001', '유저명')

 

 

만약 한개의 테이블에서 검색/입력/수정을 할 경우에는 DUAL을 사용하는 편이 낫다.

============================ 이하 예시 ============================

 

MERGE INTO USER_TABLE A

  USING DUAL

       ON (A.USER_NO = '10')

WHEN MATCHED THEN

UPDATE SET

             DEPT_NO = '30'

WHEN NOT MATCHED THEN

INSERT (USER_NO, USER_NM, DEPT_NO)

VALUES('10', '유저명', '30')

 

 

1. 위의 query는 정상인데 ORA-00900 : SQL문이 부적합니다.  라는 오류가 발생한다면 

    JAVA에서 dataAccesser.update 를 사용한게 아니라 dataAccesser.query 를 사용했기 때문.

 

2. 한개의 테이블에서 검색/입력/수정할 경우에는 USING DUAL 을 사용, ON에 직접 조건 값을 입력해준다.

 

○출처ㅣm.blog.naver.com/PostList.nhn?blogId=bluefish115

+ Recent posts