使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据
Posted
技术标签:
【中文标题】使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据【英文标题】:Extract data from XML Clob using SQL from Oracle Database 【发布时间】:2012-11-16 00:47:36 【问题描述】:我想使用 sql 从表 TRAPTABCLOB 中提取 Decision 的值,该表具有列 testclob,XML 存储为 clob。
示例 XML 如下。
<?xml version="1.0" encoding="UTF-8"?>
<DCResponse>
<Status>Success</Status>
<Authentication>
<Status>Success</Status>
</Authentication>
<ResponseInfo>
<ApplicationId>5701200</ApplicationId>
<SolutionSetInstanceId>
63a5c214-b5b5-4c45-9f1e-b839a0409c24
</SolutionSetInstanceId>
<CurrentQueue />
</ResponseInfo>
<ContextData>
<!--Decision Details Start-->
<Field key="SoftDecision">A</Field>
<Field key="**Decision**">1</Field>
<Field key="NodeNo">402</Field>
<Field key="NodeDescription" />
<!--Decision Details End-->
<!--Error Details Start-->
<Field key="ErrorResponse">
<Response>
<Status>[STATUS]</Status>
<ErrorCode>[ERRORCODE]</ErrorCode>
<ErrorDescription>[ERRORDESCRIPTION]</ErrorDescription>
<Segment>[SEGMENT]</Segment>
</Response>
</Field>
<Field key="ErrorCode">0</Field>
<Field key="ErrorDescription" />
</ContextData>
</DCResponse>
【问题讨论】:
【参考方案1】:这应该可以工作
SELECT EXTRACTVALUE(column_name, '/DCResponse/ContextData/Decision') FROM traptabclob;
我假设 ** 只是为了突出显示?
【讨论】:
不工作 - 出现 Ora-00932 错误。 A.B.Cade 的解决方案效果很好。【参考方案2】:试试
SELECT EXTRACTVALUE(xmltype(testclob), '/DCResponse/ContextData/Field[@key="Decision"]')
FROM traptabclob;
Here 是一个 sqlfiddle 演示
【讨论】:
嗨..我有类似的问题。你能帮帮我吗。SQL Fiddle 不起作用。 现在很好用。如何提取全部内容并将其保存到文件中? @SOaddict,整个内容都在testclob
中,您可以使用正确的 XPATH 表达式(提取函数的第二个参数)提取任何您想要的内容。至于如何将其写入文件 - 这是一个完全不同的帖子......见here或here
如何读取第一个以上是关于使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL 使用 XMLTABLE 解析 xml 中的嵌套对象
将 XML 文档从 SQL SERVER 插入到 Oracle
mybatis里的xml中的写添加的sql语句,怎么使用oracle数据库的序列