TECH
QUESTION
자주하는 질문답변 입니다.
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 | |||
---|---|---|---|
등록된 코멘트가 없습니다. |