2013년 6월 21일 금요일

대량의 txt파일을 oracle에 import시 참조용

대량의 txt파일을 저장할때 이렇게 하세요
<아직 미 완료 char자료형은 그냥들어가는데 number형이 문제네..>

ctl파일을 아래 방법대로 만든다

ctl파일 작성법
LOAD DATA
INFILE 파일명(절대경로)
INSERT //REPLACE 기존행모두삭제후Insert, APPEND 행추가, INSERT 비어있는 테이블에넣을때, TRUNCATE 테이블의 기존 데이터 모두 TRUNCATE하고 INSERT
INTO TABLE 테이블명
FIELDS TERMINATED BY '|'  //컬럼구분자
(LOC_CODE number(3), ITEM_CODE number(3), HOUR8_TIME char(10), HOUR8_VALU number(10,3), HOUR8_OVER char(1)) //컬럼형식 및 자료크기

(LOC_CODE  INTEGER EXTERNAL(3), ITEM_CODE  INTEGER EXTERNAL(3), HOUR8_TIME char(10), HOUR8_VALU DECIMAL(10,3), HOUR8_OVER char(1)) //컬럼형식 및 자료크기

컬럼타입형식

table 구조
이름          Null?   DataType
--------   -----  ------------
A                         NUMBER(7,4)
b                         NUMBER(3)

일경우  number(7,4) 는 DECIMAL(7,4)  number(3)은  INTEGER EXTERNAL로 선언해서 사용한다

$ cat tmsa1_8hour.ctl
LOAD DATA
INFILE ?????/tmsa1_8hour.txt
INSERT //REPLACE 기존행모두삭제후Insert, APPEND 행추가, INSERT 비어있는 테이블에넣을때, TRUNCATE 테이블의 기존 데이터 모두 TRUNCATE하고 INSERT
INTO TABLE A.TABLE
FIELDS TERMINATED BY '|'
(LOC_CODE number(3), ITEM_CODE number(3), HOUR8_TIME char(10), HOUR8_VALU number(10,3), HOUR8_OVER char(1))

실행방법
oracle 계정으로 로그인후 실시
$ ls
tmsa1_8hour.ctl  tmsa1_8hour.txt
$ sqlldr
$ sqlldr ID/PW control=tmsa1_8hour.ctl data=tmsa1_8hour.txt




참조
SQLLDR CONTROL=foo.ctl, LOG=bar.log, BAD=baz.bad, DATA=etc.dat 
   USERID=scott/tiger, ERRORS=999 , LOAD=2000, DISCARD=toss.dis,
   DISCARDMAX=5



참조사이트 http://blog.naver.com/koogoon/60035364340

댓글 없음:

댓글 쓰기