【问题标题】:importing XML data in Oracle DB在 Oracle DB 中导入 XML 数据
【发布时间】:2015-07-14 14:33:41
【问题描述】:

我是 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 尝试转换和导出到数据库,但它不会在表之间创建任何关系。

这里有人可以帮助我找到解决方案并推动解决吗?

非常感谢!

【问题讨论】:

  • 所以你提交了吗? “select count(*) from TESTTABLE2”返回什么?
  • 有人可以帮我吗?

标签: xml oracle xmlspy


【解决方案1】:

您可以使用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 与对它的引用弄乱。

【讨论】:

  • 非常感谢。有用。我现在正在尝试将其他字段也添加到选择中,例如 f_name(在其他主题中提到)..
猜你喜欢
  • 2017-01-15
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2015-12-24
  • 1970-01-01
相关资源
最近更新 更多