INSERT ALL

Oracle 2014. 12. 4. 09:27

Unconditional INSERT ALL

Unconditional INSERT ALL은 하나의 INSERT문으로 여러 개의 테이블에 데이터를 입력할 수 있다.

INTO 절과 VALUES 절에 기술한 컬럼의 개수와 데이터 타입은 동일해야 한다.

1
2
3
4
5
6
-- Unconditional INSERT ALL Syntax
INSERT ALL
  [INTO 테이블1 VALUES (컬럼1,컬럼2,...)]
  [INTO 테이블2 VALUES (컬럼1,컬럼2,...)]
  .......
Subquery;

직접 실습을 하면서 이해해보자. 아래 예제는 emp 테이블의 데이터를 emp_ename테이블과 emp_deptno 테이블에 INSERT ALL을 사용하여 동시에 INSERT 하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- scott 계정에서 emp 테이블을 이용하여 실습하였다.
SQLPLUS scott/tiger
 
 
-- 테스트용 테이블 emp_ename과 emp_deptno를 생성하자
-- empno, ename, sal 컬럼을 가지는 emp_ename 테이블 생성
CREATE TABLE emp_ename
    AS
SELECT empno, ename, sal
  FROM emp
 WHERE 1=2;
 
-- empno, deptno, job 컬럼을 가지는 emp_deptno 테이블 생성
CREATE TABLE emp_deptno
    AS
SELECT empno, deptno, job
  FROM emp
 WHERE 1=2;
 
 
-- 테이블이 정상적으로 생성되었는지 확인해 보자
SELECT * FROM emp_ename;
SELECT * FROM emp_deptno;
 
 
 
--INSERT ALL을 이용하여 emp_ename, emp_deptno 테이블에 INSERT를 해보자
INSERT ALL
  INTO emp_ename VALUES (empno, ename, sal)
  INTO emp_deptno (empno, deptno, job) VALUES (empno, deptno, job)
SELECT empno, ename, sal, deptno, job
  FROM emp
 WHERE sal >= 2900;
 
 
 
-- 데이터가 정상적으로 삽입되었는지 확인해 보자
-- sal >= 2900 조건을 만족하는 4건이 emp_ename, emp_deptno 테이블에
-- INSERT 된것을 확인 할 수 있다.
SELECT * FROM emp_ename;
SELECT * FROM emp_deptno;
 
 
-- 테스트 테이블은 삭제 한다.
DROP TABLE emp_ename;
DROP TABLE emp_deptno;

Conditional INSERT ALL

Conditional INSERT ALL을 사용하면 특정 조건에 맞는 행만 원하는 테이블에 입력할 수 있다.

서브쿼리로의 결과 행을 WHEN ... THEN절에서 체크한 후 조건에 맞는 절에 기술된 테이블에 INSERT 작업을 수행한다.

1
2
3
4
5
6
7
8
9
10
11
-- Conditional INSERT ALL Syntax
INSERT ALL
WHEN 조건절1 THEN
  INTO [테이블1] VALUES (컬럼1,컬럼2,...)
WHEN 조건절2 THEN
  INTO [테이블2] VALUES (컬럼1,컬럼2,...)
........
ELSE
  INTO [테이블3] VALUES (컬럼1,컬럼2,...)
 
Subquery;

직접 실습을 하면서 이해해보자. 아래는 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-- 테스트용 테이블 emp_dept10, emp_dept20, emp_dept30을 생성한다.
CREATE TABLE emp_dept10 AS SELECT empno, ename, job, sal FROM emp WHERE 1=2;
CREATE TABLE emp_dept20 AS SELECT empno, ename, job, sal FROM emp WHERE 1=2;
CREATE TABLE emp_dept30 AS SELECT empno, ename, job, sal FROM emp WHERE 1=2;
 
-- 테이블이 정상적으로 생성되었는지 확인해 보자
SELECT * FROM emp_dept10;
SELECT * FROM emp_dept20;
SELECT * FROM emp_dept30;
 
 
-- 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제이다.
-- deptno=10 부서는 10%인상하여 emp_dept10 테이블에 INSERT
-- deptno=20 부서는 20%인상하여 emp_dept20 테이블에 INSERT
-- deptno=30 부서는 30%인상하여 emp_dept30 테이블에 INSERT
INSERT ALL
 WHEN deptno=10 THEN
      INTO emp_dept10
      VALUES(empno, ename, job, ROUND(sal*1.1))
 WHEN deptno=20 THEN
      INTO emp_dept20
      VALUES(empno, ename, job, ROUND(sal*1.2))
 WHEN deptno=30 THEN
      INTO emp_dept30
      VALUES(empno, ename, job, ROUND(sal*1.3))
SELECT deptno, empno, ename, job, sal
  FROM emp;
 
 
-- emp_dept10 테이블에 데이터가 정상적으로 등록 되었는지 확인해 보자
-- emp_dept20, emp_dept30 테이블도 테이블명만 변경하여 확인해 보세요
SELECT d.sal "인상급여", e.sal "원급여"
  FROM emp_dept10 d, emp e
 WHERE d.empno = e.empno;
   
 
 
-- 테스트 테이블은 삭제 한다.
DROP TABLE emp_dept10;
DROP TABLE emp_dept20;
DROP TABLE emp_dept30;

태그

문서에 대하여

  • - 강좌 URL : http://www.gurubee.net/lecture/2688
  • - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
  • 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.


'Oracle' 카테고리의 다른 글

ORACLE SYSTEM TABLE  (0) 2014.12.09
CUBRID vs MySQL vs ORACLE SQL 타입별 비교  (0) 2014.12.08
계층구조 쿼리의 활용2  (0) 2014.12.03
계층구조 쿼리의 활용  (0) 2014.12.03
오라클 계층구조 쿼리  (0) 2014.12.03
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,