“如何提取XML密钥”;“价值”;从SQL CLOB
我试图从CLOB列中存储的XML中提取信息。我已经搜索了论坛,到目前为止还无法获得需要的数据。我对SQL有基本的了解,但这是我无法理解的 XML类似于以下内容:“如何提取XML密钥”;“价值”;从SQL CLOB,sql,xml,oracle,xml-parsing,clob,Sql,Xml,Oracle,Xml Parsing,Clob,我试图从CLOB列中存储的XML中提取信息。我已经搜索了论坛,到目前为止还无法获得需要的数据。我对SQL有基本的了解,但这是我无法理解的 XML类似于以下内容: <?xml version="1.0" encoding="UTF-8"?> <Response> <Header> <OrderNum value="12354321"/> <ExtractDate value="11-30-2012"/&
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Header>
<OrderNum value="12354321"/>
<ExtractDate value="11-30-2012"/>
<RType value="Status"/>
<Company value="Company"/>
</Header>
<Body>
<Status>
<Order>
<ActivityType value="ValidateRequest"/>
<EndUser>
<Name value="Schmo, Joe"/>
<Address>
<SANO value="12345"/>
<SASN value="Mickey Mouse"/>
<SATH value="Lane"/>
<SASS value="N"/>
<City value="Orlando"/>
<State value="FL"/>
<Zip value="34786"/>
<Number value="5550000"/>
</Address>
</EndUser>
<COS value="1"/>
<TOS value="3"/>
<MainNumber value="5550000"/>
</Order>
<ErrorCode value="400"/>
<ErrorMessage value="RECEIVED"/>
</Status>
</Body>
</Response>
我想得到“地址”下的值
我尝试了以下操作,但返回“NULL”
选择EXTRACTVALUE(XMLTYPE(RESPONSE_CLOB),'/RESPONSE/Body/Status/Order/EndUser/Address/SANO')作为SANO
从应答表
其中ROWNUM<2
我正在尝试获取它,以便可以提取在“SANO”中指定为“value”的“12345”(最终获取其他字段的值,但希望至少先获取一个字段的值)。您当前正在检索节点的文本值,但12345是元素的value属性,而不是其文本内容。因此,您需要使用
@属性
语法,即:
SELECT EXTRACTVALUE(XMLTYPE(RESPONSE_CLOB),'/Response/Body/Status/Order/EndUser/Address/SANO/@value') AS SANO
FROM RESPONSE_TABLE
WHERE ROWNUM < 2;
SANO
--------------------
12345
如果一个XML文档有多个Address
节点,您可能会发现使用-required更容易,但即使只使用一个节点,将值作为列拉出也会减少重复性,并使检索合适的数据类型更容易:
select x.*
from response_table rt
cross join xmltable(
'/Response/Body/Status/Order/EndUser/Address'
passing xmltype(rt.response_clob)
columns sano number path 'SANO/@value',
sasn varchar2(30) path 'SASN/@value',
sath varchar2(10) path 'SATH/@value'
-- etc.
) x
where rownum < 2;
SANO SASN SATH
-------------------- ------------------------------ ----------
12345 Mickey Mouse Lane
选择x*
从响应表rt
交叉连接xmltable(
“/Response/Body/Status/Order/EndUser/Address”
传递xmltype(rt.response\u clob)
列sano编号路径“sano/@value”,
sasn varchar2(30)路径“sasn/@value”,
sath varchar2(10)路径“sath/@value”
--等等。
)x
其中rownum<2;
萨诺·萨森·萨思
-------------------- ------------------------------ ----------
米老鼠巷12345号
关于使用这些函数查询XML数据。这三个示例都非常有用!是的,第三种使用XMLTABLE的方法将是最简单的。非常感谢你!
SELECT XMLQUERY(
'/Response/Body/Status/Order/EndUser/Address/SANO/@value'
PASSING XMLTYPE(RESPONSE_CLOB)
RETURNING CONTENT
) AS SANO
FROM RESPONSE_TABLE
WHERE ROWNUM < 2;
select x.*
from response_table rt
cross join xmltable(
'/Response/Body/Status/Order/EndUser/Address'
passing xmltype(rt.response_clob)
columns sano number path 'SANO/@value',
sasn varchar2(30) path 'SASN/@value',
sath varchar2(10) path 'SATH/@value'
-- etc.
) x
where rownum < 2;
SANO SASN SATH
-------------------- ------------------------------ ----------
12345 Mickey Mouse Lane