2.3. Conditional INSERT FIRST
Conditional INSERT FIRST를 사용하면 특정 조건에 맞는 행만 원하는 테이블에 입력할 수 있습니다.
(※ 처음 만족하는 조건절만 수행합니다.)
서브쿼리로의 결과 행을 WHEN … THEN 절에서 체크한 후 조건에 맞는 절에 기술된 테이블에 INSERT 작업을 수행합니다.
-- Conditional INSERT FIRST Syntax
INSERT FIRST
WHEN 조건절 1 THEN
INTO [테이블 1] VALUES (컬럼 1,컬럼 2,...)
WHEN 조건절 2 THEN
INTO [테이블 2] VALUES (컬럼 1,컬럼 2,...)
........
ELSE
INTO [테이블 3] VALUES (컬럼 1,컬럼 2,...)
Subquery;
앞서 Conditional INSERT ALL 의 예제를 INSERT FIRST로 변경합니다.
다음과 같이 첫번째 조건을 만족하면 그 다음 조건은 수행하지 않게 되므로, 두 조건을 모두 만족하는 7900 JAMES 는
두번째 조건절을 수행하지 않아 emp_empno 테이블에는 입력이 되지 않습니다.
-- 테스트용 테이블 emp_empno , emp_salary을 생성합니다.
DROP TABLE emp_empno;
DROP TABLE emp_sal;
CREATE TABLE emp_empno AS SELECT empno, ename, job, sal, deptno FROM emp WHERE 1=2;
CREATE TABLE emp_sal AS SELECT empno, ename, job, sal, deptno FROM emp WHERE 1=2;
-- 테이블이 정상적으로 생성되었는지 확인해 봅니다.
SELECT * FROM emp_empno;
SELECT * FROM emp_sal;
-- empno >= 7876 인 사원은 emp_empno 테이블에 INSERT
-- sal <= 1000 인 사원은 emp_sal 테이블에 INSERT
INSERT FIRST
WHEN empno >= 7876 THEN
INTO emp_empno
VALUES(empno, ename, job, sal, deptno)
WHEN sal <= 1000 THEN
INTO emp_sal
VALUES(empno, ename, job, sal, deptno)
SELECT empno, ename, job, sal, deptno
FROM emp;
-- emp_empno 테이블에 데이터가(empno >= 7876) 정상적으로 등록 되었는지 확인해 봅니다.
SQL> SELECT * FROM emp_empno;
EMPNO ENAME JOB SAL DEPTNO
-------------- -------------- ---------- ------------ -------------
7876 ADAMS CLERK 1100 20
7900 JAMES CLERK 950 30
7902 FORD ANALYST 3000 20
7934 MILLER CLERK 1300 10
4 rows selected.
-- emp_sal 테이블에 데이터가(sal <= 1000) 정상적으로 등록 되었는지 확인해 봅니다.
SQL> SELECT * FROM emp_sal;
EMPNO ENAME JOB SAL DEPTNO
-------------- -------------- ---------- ------------ -------------
7369 SMITH CLERK 800 20
1 rows selected.