'MERGE'란 하나 혹은 그 이상의 테이블에 대한 INSERT, UPDATE 작업을 위해 하나 혹은 그 이상의 소스로부터 질의할 때 사용하는 명령어
여러 번의 INSERT, UPDATE나 DELETE 작업을 피할 수 있는 방법
------------------------------------------------------------------------------------------------------------------------------------------------------
문법)
MERGE INTO 테이블이름
USING SELECT (구문)
ON (조건)
WHEN MATCHED THEN
UNDATE SET [WHERE] (구문)
DELETE [WHERE] (구문)
WHEN NOT MATCHED THEN
INSERT VALUES (구문)
[WHERE] (구문)
;
예시)
MERGE INTO bonuses b
USING (SELECT employee_id, salary, department_id FROM employees) e
ON (e.employee_id = b.employee_id)
WHEN MATCHED THEN
UPDATE SET bonus = bonus + salary * 0.1
DELETE WHERE salary > 8000
WHEN NOT MATCHED THEN
INSERT VALUES (e.employee_id, salary * 0.1)
WHERE salary <= 8000
;
직접짠쿼리)
맞는 문법이나, 회사 서버가 구닥다리라서 지원안함..... 이거때매 멘붕이였음 ㅠ
# 오라클 9i 에서는 ORA-00905: 누락된 키워드 라는 에러가 뜬다........ 테스트 서버인 오라클 11g 에서는 잘 작동하는거 확인.... 아마 오라클 10 이상부터 MERGE를 지원해준다고 들은거같다.... #
MERGE INTO SALES_1 B
USING SALES_CUSTOMER_CONTROL A
ON (A.SALES_CODE = B.SALES_CODE AND A.CONTROL_GUBUN ='1')
WHEN MATCHED THEN
UPDATE SET B.DEPT_CODE='390100'
, B.EMP_NO='120105'
;
-------------------------------------------------------------------------------------------------------------------------------------------------------
다중테이블에서 조건찾아 UPDATE하기!! (위에 MERGE가 안먹혀서, 공부한 방법)
UPDATE SALES_1 B
SET B.DEPT_CODE='390100',
B.EMP_NO='120105'
WHERE EXISTS (SELECT 1
FROM SALES_CUSTOMER_CONTROL A
WHERE A.SALES_CODE = B.SALES_CODE
AND A.CONTROL_GUBUN ='1')
------------------------------------------------------------------------------------------------------------------------------------------------------
Exists 연산자
두 테이블 간의 결과를 어떤 값이 존재하는 지를 알고 싶은 경우,
새로운 데이터를 입력할 때 해당 데이터가 이미 존재하는지 확인할 때도 유용하다.
핵심은 '존재하는가'를 판단하는 것.
- 서브쿼리 앞에 사용하는 연산자
- 서브쿼리 결과의 TRUE(메인 쿼리 행 출력) / FALSE(메인쿼리 행 생략) 값을 메인쿼리에 전달
- not exists 로 부정연산 가능
예시) SELECT * FROM 테이블 A
WHERE EXISITS (SELECT ................)
사용법)
SELECT *
FROM SALES_1 B
WHERE EXISTS (SELECT 1
FROM SALES_CUSTOMER_CONTROL A
WHERE A.SALES_CODE = B.SALES_CODE
AND A.CONTROL_GUBUN ='1')
'DB > Oracle' 카테고리의 다른 글
[Oracle] REGEXP_SUBSTR =CASE WHEN END + SUBSTR + INSTR (0) | 2022.07.27 |
---|---|
[Oracle] ORA-01722 & ORA-00979 & ORA-00918 & ORA-00920 (0) | 2022.07.26 |
[Oracle] Trigger (0) | 2022.07.22 |
[Oracle] 오라클 11g 테스트 서버 세팅하기 (개인 pc용) (0) | 2022.07.21 |
[Oracle] Toad팁 & SQL 툴에서 데이터 직접 수정하는법 & 커밋후 데이터 복구방법 (0) | 2022.07.21 |