从XML到Oracle PL / SQL环境中的路径列表

问题描述 投票:3回答:1

请假设您有一个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安装。

xml oracle plsql xmltype
1个回答
5
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.