簡體   English   中英

在Oracle DB中導入XML數據

[英]importing XML data in Oracle DB

我是DBAdministration的新手,我被要求從大(8Gb)xml文件開始設計數據庫結構。 我正在建造建築物,幾乎完成了。

我正在測試將數據從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嘗試將其轉換並導出到數據庫,但是它不會在表之間創建任何關系。

這里有人可以幫助我找到解決方案並推動解決方案嗎?

非常感謝!

您可以使用XMLTable子句以關系形式獲取數據:

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的引用弄亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM