반응형
/********************************************************************************************
-- Title : [10g] SQL*Loader 사용법 - ver.dbrang
-- Reference : dbrang.tistory.com
-- Key word : sqlldr sql로더 sql 로더
********************************************************************************************/
/*************************************
-- 샘플 1(상수, 일자)
*************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
( aa integer external
, bb constant '100'
, cc sysdate
, dd char
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
1,xxx
2,yyy
3,zzz
4,qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
 

/*************************************
-- 샘플 2(SEQUENCE)
*************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
, ee number
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
( aa integer external
, bb constant '100'
, cc sysdate
, dd char
, ee sequence(100,2)
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
1,xxx
2,yyy
3,zzz
4,qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
 

/***************************************
-- 샘플 3(자리수 별로 추출, Blank 포함)
***************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
, ee number
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
preserve blanks  /* 블랭크 포함 */
into table scott.tbl_sqlldr1
( aa position(01:02) integer external
, bb constant '100'
, cc sysdate
, dd position(03:06) char
, ee sequence(100,2)
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11xxxx
21yyyy
31zzzz
41qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from
scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log   /* 4번째행이 에러로 떨궈지지 않았다. */
$ cat *.bad  
 

/***************************************
-- 샘플 4(NULL 데이터 넣기)
***************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
, ee number
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
trailing nullcols   /* null 허용(빼고 테스트 요) */
( aa integer external
, bb constant '100'
, cc sysdate
, dd char
, ee sequence(100,2)
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11,xxx
21,
31,
41,qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
 

/*********************************************
-- 샘플 5(CHAR형 필드가 blank일 때 NULL삽입)
*********************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
, ee number
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
( aa integer external
, bb constant '100'
, cc sysdate
, dd char(4) nullif dd = blanks
, ee sequence(100,2)
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11,xxxx
21,____  /* _는 blank */
31,____
41,qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
 

/*********************************************
-- 샘플 6
   (position 지정시 blank 그대로 로드)
   (일자 입력 방식 지정)
*********************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb varchar2(6)
, cc date
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
preserve blanks  /* 블랭크 포함 */
into table scott.tbl_sqlldr1
( aa position(01:02) integer external
, bb position(03:06) char nullif bb = blanks
, cc position(07:14) date "YY/MM/DD"
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11xxxx92/12/12
21yyyy________   /* _는 blank */
31zzzz________
41qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log   /* 4번째행이 에러로 떨궈지지 않았다. */
$ cat *.bad 
 

/****************************************************
-- 샘플 7(숫자 필드에 blank가 있을 때 0으로 채우기)
****************************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb number
, cc date
, dd varchar2(6)
, ee number
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
( aa integer external defaultif dd = blanks
, bb constant '100'
, cc sysdate
, dd char
, ee sequence(100,2)
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11,xxxx
_,yyyy   /* _는 blank */
_,zzzz
41,qqqqqqq

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
 

/****************************************************
-- 샘플 8
   (데이터가 NULL일 때 NULL문자 넣기, 대문자 변환)
   (NVL같은 함수는 Direct의 경우 사용 불가)
****************************************************/
-- 테이블 생성
drop table scott.tbl_sqlldr1;
create table scott.tbl_sqlldr1
( aa number
, bb varchar2(6)
, cc varchar2(6)
) tablespace users;

-- 콘트롤 파일 생성
$ vi ctl_sqlldr1.ctl
load data
infile sam_sqlldr1.dat
replace
into table scott.tbl_sqlldr1
fields terminated by ','
( aa integer external
, bb char "nvl(:bb, '<NULL>')"
, cc char "upper(:cc)"
)

-- 입력 데이터
$ vi dat_sqlldr1.dat
11,xxxx,abcd
22,,abcd
33,zzzz,abcd
41,qqqqqqq,abcd

-- SQL*Loader 실행
$ sqlldr scott/tiger control=ctl_sqlldr1.ctl data=dat_sqlldr1.dat discard=ctl_sqlldr1.dis

-- 로딩 확인
select * from scott.tbl_sqlldr1;

-- 생성된 파일 확인
$ cat *.log
$ cat *.bad
반응형

+ Recent posts