본문 바로가기

Development/Database

Oracle Sql Loader 를 이용해서 xml 포멧의 데이터 insert 하기.

 

xml 포멧으로 된 데이터 파일을 oracle 테이블에 입력해달라는 요구사항이 들어왔다.

sql developer 같은 툴에서는 불가하고 database server 에 원격으로 붙어서 작업한다.

 

 

1. oracle server 에 접속 후 작업 할 임의의 디렉토리를 생성한다.

- C:\temp_data

 

2. 디렉토리 하위에 data 로 사용 할 xml 파일을 위치시킨다.

- C:\temp_data\relation.xml

 

3. 디렉토리 하위에 control 파일을 위치시킨다.

- sql loader 를 제어하는 파일.

- C:\temp_data\relation.ctl

 

예) 파일내용.

LOAD DATA
INFILE 'C:\temp_data\relation.xml'
INTO TABLE TBL_RELATION_TEMP
(
    dummy FILLER CHAR(100000) TERMINATED BY "<row>",
    ID CHAR(30) ENCLOSED BY "<id>" AND "</id>",
    PASSWORD CHAR(30) ENCLOSED BY "<password>" AND "</password>",
    NAME CHAR(40) ENCLOSED BY "<name>" AND "</name>",
    LINK CHAR(40) ENCLOSED BY "<link>" AND "</link>",

 

예) 옵션 설명.

 

- LOAD DATA : 데이터를 로드한다.
INFILE : xml 파일 위치.
INTO TABLE : insert 할 테이블명.
마지막 괄호안에 테이블 컬럼을 정의한다.
- 모든 컬럼은 CHAR 형으로 선언한다. 

 

 

4. 커맨드창에서 명령어를 실행한다.

- sid 가 여러개일 경우 하나를 설정한다.

- C:\>set oracle_sid=orcl10g

- C:\>sqlplus scott/tiger

- SQL>$sqlldr userid=scott/tiger control='C:\temp_data\relation.ctl' log='C:\temp_data\relation.log' bad='C:\temp_data\relation.bad' discard='C:\temp_data\relation.dsc' errors=999999999 

 

5. 정상적으로 실행된 경우.

- 아래의 문구를 출력한다.



SQL*Loader: Release 10.2.0.3.0 - Production on 금 2월 26 17:47:19 2016


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


커밋 시점에 도달 - 논리 레코드 개수 60

 

6. 마지막으로 커밋한다.

 

 

 

** 주의사항 **

 
xml 파일의 데이터는 건당 1개의 row 로 저장되어야 한다.
처음 받은 xml 파일로 테스트했을때 계속 오류가 발생했던 이유가,
데이터가
<row>
    <id>...</id>
</row>
이런 포멧으로 저장되어 있어 <row> 단위로 데이터를 끊어오지 못해서 데이터를 읽어오면서 오류가 발생.
 
데이터는
<row>    <id>...</id></row>
이런 포멧으로 저장되어 있어야 한다.

 

(각각의 '<>' 태그사이의 간격은 상관없으나 1개의 데이터는 반드시 1개의 row 에 들어있어야 한다.)