MERGE INTO 등록할_테이블_명 TB_NM
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에 직접 조건 값을 입력해준다.