728x90
반응형

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

  ================================================
  * Oracle Community OracleClub.com
  * http://www.oracleclub.com
  * http://www.oramaster.net
  * 운영자 : 김정식 (oramaster _at_ empal.com)
================================================
※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

 

728x90
반응형

'SQL > SQL Loader' 카테고리의 다른 글

[Marbong Oracle] 오라클 SQL*Loader 툴을 이용한 데이터 로드  (0) 2015.09.24
SQL Loader사용방법  (0) 2015.09.24
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,