2

我用谷歌搜索,但似乎找不到一个直接的答案。我有一个简单的表,我在其中加载了一个完整的 XML 文件的内容。现在我尝试查询 XML 数据并给它一个结构化的概述,这可行,但我需要一些解释。

我的问题(见下面使用的数据):

  • 有人可以解释我如何扩展我的查询,所以我也可以从 XML 部分“AddressC”查询数据。现在我只能从'AddressB'获取数据。

  • 这部分到底是做什么的,为什么会有一个 url(我从 internetz 复制了查询):xmltable(xmlnamespaces(' http://www.w3.org/2001/XMLSchema-instance ' as " xsi")

*表中的 XML(XML_FILES2,表有两个单元格 test1 和 test2):*

<PurchaseOrder>
  <AddressB>
    <Name>Ellen Adams</Name>
    <Street>123 Maple Street</Street>
    <City>Mill Valley</City>
    <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Addressb>
  <AddressC>
    <Name>Tai Yee</Name>
    <Street>8 Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
  </AddressC>
</PurchaseOrder>

我使用的查询

SELECT street
FROM xml_files2 xf, xmltable(xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as "xsi"),
'PurchaseOrder/Addressb' passing xf.test2
columns 
street varchar2(100) path 'Street'
) PurchaseOrder;
4

1 回答 1

0

您的 XML 无效。结束标记 Addressb 与开始标记 AddressB 不匹配。

如果这只是您的问题中的一个错字,这里有一个从 XML 中的不同父级读取 Street 元素的示例。

CREATE TABLE T1 (C1 XMLTYPE);

INSERT INTO T1 VALUES (XMLTYPE('<PurchaseOrder>
  <AddressB>
    <Name>Ellen Adams</Name>
    <Street>123 Maple Street</Street>
    <City>Mill Valley</City>
    <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </AddressB>
  <AddressC>
    <Name>Tai Yee</Name>
    <Street>8 Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
  </AddressC>
</PurchaseOrder>'));


SELECT STREET FROM T1, XMLTABLE('PurchaseOrder/*' PASSING T1.C1 
    COLUMNS 
        STREET VARCHAR2(100) PATH 'Street'
    ) PURCHASEORDER;

结果:

STREET                                                                                             
----------------------------------------------------------------------------------------------------
123 MAPLE STREET                                                                                     
8 Oak Avenue                    
于 2013-09-11T22:05:35.397 回答