2012-08-31 2 views
0

오라클은 XML 형식의 파일을 표준화하여 업로드합니까? XML 출력에 사용되는 표준 형식 (구조 = ROWSET/ROW/columname)은 적절한 제어 파일 내용으로 sqlldr을 실행하여 다시 테이블로 다시 업로드 할 수 있다고 생각했습니다.
그러나 웹에서이 모든 것을 찾을 수는 없으므로 시험 후에 오류 메시지는 XML 형식의 테이블로 XML을 업로드 할 수 있다는 것을 나타내는 것처럼 보입니다. 여기서 XML 형식의 테이블로 데이터를 업로드 할 수 있습니다. XML 형식의 데이터Oracle SQL * Loader가 XML을 처리 할 수 ​​있습니까?

답변

1

아니요, SQL * Loader는 "플랫"파일 만 처리 할 수 ​​있습니다.

하나의 옵션은 ROWSET/ROW/column 형식을 텍스트 파일로 변환 한 다음이를 대상 테이블로 가져 오는 XSLT 변환을 작성하는 것입니다.

또 다른 옵션은 XML을 단일 행으로 가져온 다음 Oracle의 XML 함수를 사용하여 해당 스테이징 테이블에서 관계형 결과를 선택하고이를 실제 테이블에 삽입하는 것입니다.

+0

OK - 올바른 컬럼 구분자가있는 파일을 사용합니다. 불쌍하고 약간의 예기치 못한 일 - 오라클에게 11.3에이 기능을 추가 할 힌트 :-). – Maestro13

+1

오라클은 차별화를 요구합니다. http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb25loa.htm 및 http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/ xdb25loa.htm # ADXDB2900 –

+0

@ SeanB.Durkin : XML 파일 (또는 조각)의 내용을 단일 XMLType 열로로드하는 예제입니다. XML 구조를 파싱하고 개별 태그의 내용을 다른 열에 넣는 것이 아닙니다. XML : ' Arthur'SQLLoader가'person (id, name) '테이블로 처리 할 수 ​​없습니다. –

1

표준화 된 옵션이 없지만이 특정 형식으로 할 수 있습니다.

CREATE TABLE test_tab (
    id NUMBER, 
    text VARCHAR2(50) 
); 

그리고 test_tab.xml 파일에 기록 :

<ROWSET> 
<ROW> 
<ID>1</ID> 
<TEXT>This is some text</TEXT> 
</ROW> 
<ROW> 
<ID>2</ID> 
<TEXT>This is some more text</TEXT> 
</ROW> 
<ROW> 
<ID>3</ID> 
<TEXT>This is some other text</TEXT> 
</ROW> 
<ROW> 
<ID>4</ID> 
<TEXT>This is also some text</TEXT> 
</ROW> 
</ROWSET> 

및 제어 파일 test_tab.ctl : 당신은 테이블이있는 경우

LOAD DATA 
INFILE 'test_tab.xml' 
CONCATENATE 4 
INTO TABLE test_tab 
(
    dummy FILLER CHAR(15) TERMINATED BY "<ROW>", 
    id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>", 
    text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>" 
) 

당신은 할 수 있습니다 :

sqlldr usr/pwd control=test_tab.ctl 

Commit point reached - logical record count 4 

SELECT * FROM test_tab; 

     ID TEXT 
---------- -------------------------------------------------- 
     1 This is some text 
     2 This is some more text 
     3 This is some other text 
     4 This is also some text 

오라클이 볼 수있는 디렉토리에 넣으면 같은 파일에서 외부 테이블을 생성 할 수도 있습니다.

CREATE TABLE test_tab (
    id NUMBER, 
    text VARCHAR2(50) 
) 
ORGANIZATION EXTERNAL 
(
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY some_dir 
    ACCESS PARAMETERS 
    (
     RECORDS DELIMITED BY "</ROW>" 
     FIELDS 
     (
      dummy CHAR(15) TERMINATED BY "<ROW>", 
      id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>", 
      text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>" 
     ) 
    ) 
    LOCATION ('test_tab.xml') 
) 
PARALLEL 
REJECT LIMIT UNLIMITED; 

Table created. 

SELECT * FROM test_tab; 

    ID TEXT 
---------- -------------------------------------------------- 
    1 This is some text 
    2 This is some more text 
    3 This is some other text 
    4 This is also some text 
+0

확실히 좋은 대안입니다. 나는 나중에 이것을 사용할 수 있도록 이것을 명심 할 것이다! – Maestro13

+0

이것을 테스트했습니다 (비어 있지 않은 테이블에 행이 추가되도록하기 위해'into table '뒤에'append' 키워드를 추가하십시오). 그리고 그것은 매력처럼 작동합니다! – Maestro13

+0

XML 문서에 '&', '<'또는 '>'과 같은 엔티티가 포함되는 즉시 오류가 발생합니다. – jarnbjo

관련 문제