본문 바로가기

DataBase/Oracle

SQL*LOADER에서 SEQUENCE함수와 DECODE함수 사용하는 방법

 - 이 내용은 오라클 불틴 No.20180 와 No.10863를 참고했습니다.

 - Unique한 DATA을 Load하고자 할때 쓰이는 오라클 시퀀스와, SEQUENCE () 함수와
   DECODE 함수의 사용 예제입니다.

- 함수를 사용하는 경우는 conventional path load인 경우에만 가능하며
  direct path load인 경우는 적용되지 않음을 주의해야 합니다.

- 테스트 테이블 생성

CREATE  TABLE load_test
   (id     NUMBER,
    data1    VARCHAR2(30),
    data2    VARCHAR2(30));

 


[예제1] Database Sequence를 Load하기


- SQL*Loader에 사용할 시퀀스를 생성 합니다.

CREATE SEQUENCE load_test_seq
START WITH 1
INCREMENT BY 1;


 - 각 데이터의 레코드의 필드를 ','로 구분을 했습니다  
 - control file 파일의 내용

============== load_test.ctl 시작 ==============
LOAD DATA
INFILE *
INTO TABLE load_test
FIELDS TERMINATED BY ','
-- null or non_existent, TRAILING NULLCOLS를 생략하면 Load가 되지 않습니다.
TRAILING NULLCOLS
-- 컬럼 옆에 시퀀스명을 지정합니다.
(data1, data2, id "load_test_seq.nextval")
BEGINDATA       -- 데이터 시작을 알림
RESEARCH,SARATOGA
ACCOUNTING,CLEVELAND
ART,SALEM
FINANCE,BOSTON
SALES,PHILA
SALES,ROCHESTER
"INT'L","SAN FRAN"
============== load_test.ctl 끝 ==============

--  SQL*Loader을 아래와 같이 실행을 합니다.
C:\>sqlldr scott/tiger load_test.ctl

-- 위의 Control File은 SQL*Loader에서 아래와 같은 Insert문을 만듭니다.
INSERT INTO load_db_seq_delimiter (data1,data2,id)
VALUES (:data1,data2,"load_test_seq.nextval");

-- 위의 방법은 DIRECT PATH에서는 사용하지 못합니다.
  


[예제2] SEQUENCE 함수를 사용하여 일련번호 지정해서 Load하기

-- 아래는 SEQUENCE함수의 옵션 입니다.
 
  SEQUENCE(n,increment)
    - 지정한 n 값부터 시작하여 increment 값만큼 증가 합니다.
 
  SEQUENCE(COUNT,increment)
    - table에 이미 존재하는 로우들을 count한 수에서 시작하여 increment 값만큼 증가 합니다.
 
  SEQUENCE(MAX, increment)
    - 해당 컬럼의 maximum 값에서 시작하여 increment 값만큼 증가 합니다.


-- Control File생성
  위에서 생성한 load_test테이블을 가지고 테스트 하겠습니다.
 
============== load_test.ctl 시작 ==============
LOAD DATA
INFILE *
-- 기존 데이터에 새로운 데이터를 추가합니다.
APPEND
INTO TABLE load_test
FIELDS TERMINATED BY ','
-- SEQUENCE함수를 사용해서 MAX부터 1씩증가 시킵니다.
(id SEQUENCE(MAX,1), data1, data2)
BEGINDATA
INCHON,SPCLINE
SEOUL,SPCROOM
============== load_test.ctl 끝 ==============
 
 
-- SQL*Loader을 실행하고 데이터를 확인해 보세요..
C:\> sqlldr scott/tiger load_test.ctl
 


[예제3] Decode 함수 사용 예제
 
-- data1 column의 데이터가 'HELLO'이면 'GOODBYE'를
    그렇지 않으면 data1 column값을 로드하는 예제 입니다.
 
 
-- Control File생성
  위에서 생성한 load_test테이블을 가지고 테스트 하겠습니다.
 
============== load_test.ctl 시작 ==============
LOAD DATA
INFILE *
APPEND               -- 기존 데이터에 새로운 데이터를 추가합니다.
INTO TABLE load_test
FIELDS TERMINATED BY ','
-- SEQUENCE함수를 사용해서 MAX부터 1씩증가 시킵니다.
-- DECODE함수를 사용해서 데이터를 컨트롤 합니다.
(id SEQUENCE(MAX,1), data1, data2 "decode(:data1, 'HELLO', 'GOODBYE', :data1)")
BEGINDATA
HELLO,""
HI,""
HEY,""
HELLO,""
============== load_test.ctl 끝 ==============
 
 
-- SQL*Loader을 실행하고 데이터를 확인해 보세요..
 
C:\>sqlldr scott/tiger load_test.ctl
 

'DataBase > Oracle' 카테고리의 다른 글

[펌]XMLTYPE 기본 사용 예  (0) 2008.08.08
[펌]with문을 활용하자  (0) 2008.08.08
SQL*Loader에 사용되는 파일들  (0) 2008.08.08
SQL*Loader란?  (0) 2008.08.08
SQL*Loader 예제  (0) 2008.08.08