Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-14
제목 SQL LOADER
1.11 DATE 필드가 BLANK로 채워져 있을 때 NULL을 삽입하고 싶은 경우

**** 테이블 구조 ****
create table nulltb2
(a varchar(10),
b varchar(10),
c date)

**** 콘트롤 화일 ****
load data
infile null2.dat
replace
into table nulltb2
fields terminated by ','
(a char,
b char,
c date "YY/MM/DD" nullif c = blanks)

**** 외부 데이타 화일 ****
aa,bb, ,
11,22, ,
99,88,92/11/11,
00,00,94/12/12,

**** 검색결과 ****
SQL>select * from nulltb2;

A B C
-------------------------
aa bb
11 22
99 88 92/11/11
00 00 94/12/12

주의사항 : 검색결과의 1 행째, 2 행째의 열 C는 블랭크가 아니라 NULL 입니다.


1.12 POSITION 지정 시 BLANK를 그대로 로드하고 싶은 경우

**** 테이블 구조 ****
create table nulltb2
(a varchar(10),
b varchar(10),
c date)

**** 콘트롤 화일 ****
--- position 지정으로 블랭크를 그대로 입력 원하는 경우
--- preserve blanks를 지정한다.
load data
infile null3.dat
replace
preserve blanks
into table nulltb2
(a position(1:2) char,
b position(3:4) char nullif b = blanks,
c position(5:13) date "YY/MM/DD")

**** 외부 데이타 화일 ****
998892/11/11
94/12/12

**** 검색결과 ****
SQL>select * from nulltb2;

A B C
-------------------------
99 88 92/11/11
94/12/12

SQL>select length(a), length(b) from nulltb2;

LENGTH(A) LENGTH(B)
-------------------
2 2
2


주의사항 :
이 경우 2 레코드 째는 A에 블랭크가 들어가고 B에 NULL이 들어갑니다.



1.13 데이타 화일의 수치 데이타 열에 BLANK가 들어가 있을 때 0을 입력하고
싶은 경우

**** 테이블 구조 ****
create table def2
(a varchar(10),
b varchar(10),
c number)

**** 콘트롤 화일 ****
load data
infile def2.dat
replace
into table def2
fields terminated by ','
(a char,
b char,
c integer external defaultif c = blanks)

**** 외부 데이타 화일 ****
11,11,123
22,22, ,
33,33, ,
44,44, ,

**** 검색결과 ****
SQL>select * from deft;

A B C
------------------------
11 11 123
22 22 0
33 33 0
44 44 0



1.14 데이타가 NULL일 때 NULL이라고 하는 문자열을 넣고 싶은 경우

**** 테이블 구조 ****
create table ifnulltb
(a varchar(10),
b varchar(10),
c varchar(10))

**** 콘트롤 화일 ****
load data
infile ifnull.dat
replace
into table ifnulltb
fields terminated by ','
(a char,
b char "nvl(:b,'NULL')",
c char)

**** 외부 데이타 화일 ****
1,2,3,
A,,B
a,b,c

**** 검색결과 ****
SQL>select * from ifnulltb;

A B C
-------------------------
1 2 3
A NULL B
a b c


주의 사항 : NVL과 같은 SQL 함수는 DIRECT LOAD의 경우 SQL 인터페이스를
경유하지 않기 때문에 사용할 수 없습니다.



1.15 어떤 열을 모두 대문자(소문자)로 변환하여 로드하고 싶은 경우

**** 테이블 구조 ****
create table uptb
(a varchar(10),
b varchar(10))

**** 콘트롤 화일 ****
load data
infile upper.dat
replace
into table uptb
fields terminated by ','
(a char "lower(:a)",
b char "upper(:b)")

**** 외부 데이타 화일 ****
aBcDeFg,AbCdEf
ccDD11,ffGG22

**** 검색 결과 ****
SQL>select * from uptb;

A B
--------------------
abcdefg ABCDEF
cdd11 FFGG22



1.16 ZONE 형 데이타를 로드하고 싶은 경우

ZONE의 데이타 형식은 1문자 1바이트로 나타납니다.

숫자 +123이라면

bit 1234 5678 1234 5678 1234 5678
1111 0001 1111 0010 1100 0011
10진 1 2 + 3

최후의 8비트의 상위 4비트(부호 비트)로 정부가 지정됩니다.

1100(정) 1101(부)

가 됩니다.

원래는 EBCDIC 코드에서

Hex F0 to F9 → +0 to +9
Hex C0 to C9 → +0 to +9(부호비트)
Hex D0 to D9 → +0 to -9(부호비트)

이것을 아스키로 변환했기 때문에

부호비트 {ABCDEFGHI}JKLMNOPQR
------------------------------------
부호 ++++++++++----------
수 01234567890123456789

가 됩니다.

**** 테이블 구조 ****
create table z
(a varchar(10),
i number,
j number)

**** 콘트롤 화일 ****
load data
infile filename.dat
replace
into table z
(a position (01) char,
i position(02:07) zoned(6),
j position(08:13) zoned(6))

**** 외부 데이타 화일 ****
A12345{12345}

**** 검색결과 ****
SQL>select * from z;

A I J
-----------------------
A 123450 -123450



1.17 decimal 형 데이타를 로드하고 싶은 경우

decimal 데이타는 1바이트에 2개의 숫자가 지정됩니다.

숫자 +123 이라면

bit 1234 5678 1234 5678
0001 0010 0011 1100
10진 1 2 3 +

끝의 4비트는 부호 비트로 불리고

1100(정) 1101(부)

가 됩니다.

**** 테이블 구조 ****
create table dec
(a varchar(10),
col1 number,
col2 number)

**** 콘트롤 화일 ****
load data
infile filename.dat
replace
into table dec
(a position (01:01) char,
col1 position(02:05) decimal(7,4),
col2 position(06:09) decimal(7,4))

**** 외부 데이타 화일 ****
데이타 화일은 바이너리이기 때문에 more 등으로 볼 수 없습니다.

4112 3456 7c12 3456 7d0a

**** 검색 결과 ****
SQL>select * from dec;

A COL1 COL2
--------------------------------
A 123.4567 -123.4567


주의 사항 :
콘트롤 화일에서 decimal 형을 사용하는 것에 따라 (length, scale)을 지정합니다.



1.18 고정 길이 레코드 데이타를 로드하고 싶은 경우

**** 테이블 구조 ****
create table fixtb
(a varchar(10),
b varchar(10))

**** 콘트롤 화일 ****
load data
infile fix.dat
"FIX 6"
replace
into table fixtb
(a char(3),
b char(3))

**** 외부 데이타 화일 ****
123456abcdef

**** 외부 데이타 화일(16진) ****
3132 3334 3536 6162 6364 6566

**** 검색결과 ****
SQL>select * from fixtb;

A B
---------------
123 456
abc def


주의 사항 : 데이타 화일의 끝에는 OxOa(CARRIAGE RETURN)가 들어가면
안 됩니다. OxOa도 1문자로 카운트되기 때문입니다.
Comment
등록된 코멘트가 없습니다.