从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环境中的路径列表的主要内容,如果未能解决你的问题,请参考以下文章

从 Oracle PL/SQL 多级集合生成 XML

Oracle 到 Excel - PL/SQL 导出过程

ORACLE PL SQL 从 SOAP XML 中提取值

oracle PL/SQL解析xml

循环在尝试通过 Oracle EBS 中的并发程序使用 PL/SQL 创建 XML 时提前结束

Oracle PL/SQL 加载 XML