从XML到Oracle PL / SQL环境中的路径列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从XML到Oracle PL / SQL环境中的路径列表相关的知识,希望对你有一定的参考价值。
请假设您有一个XML文件(例如,存储在Oracle表中,该表还有一个CLOB列):
<ALFA>
<BETA>0123</BETA>
<GAMMA>2345</GAMMA>
<DELTA>
<EPSILON>3</EPSILON>
</DELTA>
</ALFA>
如何在输出中生成所有可能路径的列表?
/ALFA/BETA/text()
/ALFA/GAMMA/text()
/ALFA/DELTA/EPSILON/text()
我需要以下内容:我必须从长XML中提取许多信息,并且我必须将XMLEXTRACT与所有可能的路径一起使用,所以我想知道是否可以以自动方式“dbms_output.put_line”它们。
我需要一个独立于标签名称的解决方案。
请假设XML格式正确。
提前感谢您的帮助。
- 在第二个实例中:
如果尚未安装Oracle Java Extension,我该怎么办?我收到以下错误?
ORA-19112: error raised during evaluation:
ORA-06550: line 1, column 13:
PLS-00201: identifier 'SYS.DBMS_XQUERYINT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
请假设我不是DBA,DBA不授权Oracle Java Extension安装。
您可以使用XMLTable
生成使用XQuery的路径列表。
EG
(Qazxswpoi)
SQLFiddle
但这是一种错误的方式,至少因为它没有效果。
只需使用相同的XQuery提取所有值:(with params as (
select
xmltype('
<ALFA>
<BETA>0123</BETA>
<GAMMA>2345</GAMMA>
<DELTA>
<EPSILON>3</EPSILON>
</DELTA>
</ALFA>
') p_xml
from dual
)
select
path_name || '/text()'
from
XMLTable(
'
for $i in $doc/descendant-or-self::*
return <element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
'
passing (select p_xml from params) as "doc"
columns path_name varchar2(4000) path '//element_path'
)
)
SQLFiddle
以上是关于从XML到Oracle PL / SQL环境中的路径列表的主要内容,如果未能解决你的问题,请参考以下文章