在表(SQL)和查询中加载XML
我在谷歌上搜索过,但似乎找不到一个直截了当的答案。我有一个简单的表,其中加载了完整XML文件的内容。现在我尝试查询XML数据并对其进行结构化概述,这是可行的,但我需要一些解释 我的问题(见下面使用的数据):在表(SQL)和查询中加载XML,sql,xml,database,oracle,oracle10g,Sql,Xml,Database,Oracle,Oracle10g,我在谷歌上搜索过,但似乎找不到一个直截了当的答案。我有一个简单的表,其中加载了完整XML文件的内容。现在我尝试查询XML数据并对其进行结构化概述,这是可行的,但我需要一些解释 我的问题(见下面使用的数据): 有人能解释一下我如何扩展我的查询,以便我也可以从XML部分“AddressC”查询数据吗。现在我只能从“AddressB”获取数据 这部分到底做了什么,为什么会有url(我从internetz复制了查询):xmltable(xmlnamespaces(“”作为“xsi”) *表中的XML
- 有人能解释一下我如何扩展我的查询,以便我也可以从XML部分“AddressC”查询数据吗。现在我只能从“AddressB”获取数据
- 这部分到底做了什么,为什么会有url(我从internetz复制了查询):xmltable(xmlnamespaces(“”作为“xsi”)
<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>
您的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;
数据库中的XML处理(据我所知)没有标准化-您使用的是什么数据库系统?我想您使用的是Oracle
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