티스토리 뷰

Oracle/Oracle-ETL

오라클 SQLLDR 예제3개.

니플하임_ 2009.05.20 16:39
[예제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
댓글
댓글쓰기 폼