프로젝트를 진행하다 보면
지역별, 지점별 기준으로 업데이트하는 경우가 많습니다
그렇때마다 지점별, 지역별 쿼리를 만들어서 inset를 하는 경우가 있습니다
DEPT 테이블 행의 값을
EAST, WEST, MID의 세 테이블에 INSERT 하고
테이블 구조는 DEPT와 같다고 가정합시다
한번에 여러 테이블 데이터 삽입
아래와 같은 구문을 사용하여 INSERT 하게되면
한번의 결과값으로 동시에 여러개의 테이블에 INSERT합니다
INSERT ALL
INTO EAST VALUES (DEPTNO, DNAME, LOC)
INTO WEST VALUES (DEPTNO, DNAME, LOC)
INTO MID VALUES (DEPTNO, DNAME, LOC)
SELECT (DEPTNO, DNAME, LOC) FROM DEPT WHERE DEPTNO = 20;
하지만 이 방법은 어떠한 조건없이
동일하게 같은 값들이 INSERT한다는 점으로
가용성이 떨어지는 면이 있습니다
한번에 여러 테이블 조건부 인설트 하기
다음 방법을 사용하면 같은 행의 값으로
둘 이상의 테이블에서 삽입할 수 있습니다
그럼 코드를 작성해봅시다
아래와 같이 코드를 작성하면
한 행으로 여러 테이블에 insert 할 수 있습니다
INSERT ALL
WHEN LOC IN ('NEW YORK', 'BOSTON') THEN
INTO EAST (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
WHEN LOC = 'CHICAGO' THEN
INTO MID (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
ELSE
INTO WEST (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
SELECT DEPT, DNAME, LOC
FROM DEPT
INSERT ALL과 INSERT FIRST 제대로 알고 사용하기
위와 같은 경우는 INSERT ALL 또는 INSERT FIRST 문을 사용할 수 있습니다
두 개의 구문은 같은 결과를 생성하지만
차이점은 존재합니다
INSERT FIRST는 조건이 참이 되는 즉시 WHEN-THEN-ELSE에서 빠져나오는
반면 INSERT ALL은 이전 테스트가 참으로 평가되더라도
모든 조건을 평가합니다
따라서 INSERT ALL을 사용하여 같은 행을 둘 이상의 테이블에 삽입할 수 있습니다
그것이 싫다면 FIRST를 사용해야 합니다
mybatis를 사용하여 동적 쿼리와 같이 사용한다면
가용성은 더욱 높아질 거라 생각합니다
프로젝트를 진행하다보면 여러 데이터를 핸들링하게 되며
어떤 쿼리가 있는지 알아야지만
적재적소에 사용하여 시간을 절약하며
코드도 간결해질수 있을거라 생각합니다
오늘도 코딩으로 한걸음 나아갑시다
모두 화이팅하시고 힘내세요!!
아직 대모험은 끝나지 않았으니까요!!
화이팅!!
'IT_Web > Oracle' 카테고리의 다른 글
Oracle mybatis 활용 DECODE CASE GROUP BY ROLLUP 회원 통계 쿼리 월별 분기별 년도별 (0) | 2022.08.08 |
---|---|
오라클 트리구조 완벽 이해하기 oracle start with connect by 사용법 (0) | 2022.07.13 |
Oracle - 카티시안(Cartesian) 곱을 이용한 조인 - 고정된 양식 출력 (0) | 2020.05.28 |
Oracle - 카테시안(Cartesian) 곱을 이용한 조인 – 관계가 없는 테이블간의 조인 (0) | 2020.05.28 |
Oracle - 날짜 빼고 더하는 계산 함수 (0) | 2020.05.26 |