2015-07-14 3 views
0

Я новичок в DBAdministration, и мне было предложено создать структуру db, начиная с больших (8Gb) xml-файлов. Я здание структуры, и это почти закончено.Импорт данных XML в Oracle DB

Я тестирую импорт данных из XML в таблицы. Я сохранил содержимое файла в столбце таблицы, но когда я пытаюсь экспортировать значение одного столбца, у меня нет результатов (и нет ошибок).

Вот код:

CREATE TABLE TESTTABLE2 (xml_file XMLTYPE) XMLTYPE xml_file STORE as securefile binary xml; 

INSERT INTO TESTTABLE2 (xml_file) 
(SELECT XMLTYPE(bfilename('EXPORT_DUMPS','test001.xml'), nls_charset_id('WE8ISO8859P1')) from dual); 


SELECT 'CD_UID' 
FROM XMLTABLE('XML/records/REC/UID' passing (SELECT xml_file FROM TESTTABLE2) 
      COLUMNS CD_UID VARCHAR2(4000));   

XML-начинается так:

<?xml version="1.0" encoding="UTF-8"?> 

<records xmlns="http://xxxxxxxxxxxxxx"> 

<REC r_id_disclaimer="yyyyy"> 
<UID>UID_number</UID> 

Я также попытался извлекая все данные непосредственно из файла XML, который я хранящийся в папке, в сервер Oracle, используя приведенный ниже код: Он также работает, но без вставленных строк.

INSERT INTO TESTTABLE(CD_UID) 
WITH t AS (SELECT xmltype(bfilename('EXPORT_DUMPS','test001.xml'), nls_charset_id('WE8ISO8859P1')) xmlcol FROM dual) 
SELECT 
extractValue(value(x),'REC/UID') as CD_UID   
FROM t,TABLE(XMLSequence(extract(t.xmlcol,'/records/REC'))) x; 

Мне также интересно, влияет ли структура XML-файла на процедуру импорта. Я имею в виду: в моей структуре у меня есть код, который ссылается на значение, которое находится в другой таблице, но в XML у меня есть прямое имя значения ..)

Я также пробовал использовать XMLSpy для преобразования и Экспортировать в БД, но он не создает никаких связей между таблицами.

Есть ли здесь кто-нибудь, кто может помочь мне найти решение и управлять им?

Большое спасибо!

+0

Так вы сделали? Что означает «select count (*) from TESTTABLE2« return? – OldProgrammer

+0

0 строк вставляется. – newinIT

+0

Кто-нибудь может мне помочь? – newinIT

ответ

0

Вы можете использовать an XMLTable clause, чтобы получить данные в реляционной форме:

select x.cd_uid 
from testtable2 t 
cross join xmltable(xmlnamespaces(default 'http://xxxxxxxxxxxxxx'), 
    '/records/REC' 
    passing t.xml_file 
    columns cd_uid varchar2(20) path 'UID' 
) x; 

CD_UID    
-------------------- 
UID_number   

У вас есть пространство имен в records узле, так что вам нужно включить, что через xmlnamespaces пункта; поскольку у вас есть только один, я сделал это по умолчанию, поэтому вам не нужно загромождать XPath со ссылками на него.

+0

Большое спасибо. Оно работает. Я пытаюсь теперь добавить также другие поля в select, например f_name (упомянутый в другой теме). – newinIT

Смежные вопросы