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 에 들어있어야 한다.)
'Development > Database' 카테고리의 다른 글
Erwin 에서 논리모델 <--> 물리모델 컬럼 정렬하기. (0) | 2016.11.11 |
---|---|
Oracle 테이블 Index 삭제후 새로 생성하기. (0) | 2016.07.08 |
ORA-12519 오류발생. (0) | 2009.02.19 |
Oracle 오류메시지 모음. (0) | 2008.09.11 |