[英]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.