- 이 내용은 오라클 불틴 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 |