Innovating today, leading tomorrow

Tibero - Admin,환경설정
[Tibero] 다중 테이블 내 Insert 수행 (3)

[Tibero] 다중 테이블 내 Insert 수행 (3)

2.2. Conditional INSERT ALL

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

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

-- 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;

아래는 부서 별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하는 예제입니다.

-- 테스트용 테이블 emp_dept10, emp_dept20, emp_dept30 을 생성합니다.
DROP TABLE emp_dept10;
DROP TABLE emp_dept20;
DROP TABLE emp_dept30;
CREATE TABLE emp_dept10 AS SELECT deptno, empno, ename, job, sal FROM emp WHERE 1=2;
CREATE TABLE emp_dept20 AS SELECT deptno, empno, ename, job, sal FROM emp WHERE 1=2;
CREATE TABLE emp_dept30 AS SELECT deptno, 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(deptno, empno, ename, job, ROUND(sal*1.1))
WHEN deptno=20 THEN
INTO emp_dept20
VALUES(deptno, empno, ename, job, ROUND(sal*1.2))
WHEN deptno=30 THEN
INTO emp_dept30
VALUES(deptno, empno, ename, job, ROUND(sal*1.3))
SELECT deptno, empno, ename, job, sal
FROM emp;


-- 테이블에 데이터가 정상적으로 등록 되었는지 확인해 봅니다.
SQL> SELECT d.deptno, d.sal "10%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept10 d, emp e
WHERE d.empno = e.empno;

DEPTNO 10%_UP_SALARY ORIGINAL_SALARY
-------------------- ----------------------- -------------------------
10 2695 2450
10 5500 5000
10 1430 1300

3 rows selected.


SQL> SELECT d.deptno, d.sal "20%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept20 d, emp e
WHERE d.empno = e.empno;

DEPTNO 20%_UP_SALARY ORIGINAL_SALARY
-------------------- ----------------------- -------------------------
20 960 800
20 3570 2975
20 3600 3000
20 1320 1100
20 3600 3000

5 rows selected.


SQL> SELECT d.deptno, d.sal "30%_UP_SALARY", e.sal "ORIGINAL_SALARY"
FROM emp_dept30 d, emp e
WHERE d.empno = e.empno;

DEPTNO 30%_UP_SALARY ORIGINAL_SALARY
-------------------- ----------------------- -------------------------
30 2080 1600
30 1625 1250
30 1625 1250
30 3705 2850
30 1950 1500
30 1235 950

6 rows selected.

아래는 조건에 사용하는 컬럼을 다르게 하여 각각의 테이블에 입력하는 예제입니다.

두 조건을 모두 만족하는 7900 JAMES 는 첫번째 조건을 만족하므로 emp_empno 테이블에 입력되었고, 두번째 조건 또한 만족하므로 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 ALL
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
7900 JAMES CLERK 950 30

2 rows selected.

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •