gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:08 25 4
gpt4 key购买 nike

请假设您有一个 XML 文件(例如,存储在一个也有 CLOB 列的 Oracle 表中):

<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 生成路径列表。

例如

( SQLFiddle )

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'
)

但这是一种错误的方式,至少因为它没有达到应有的效果。

只需使用相同的 XQuery 提取所有值:( SQLFiddle )

with params as (
select
xmltype('
<ALFA>
<BETA>0123</BETA>
<GAMMA>2345</GAMMA>
<DELTA>
<EPSILON>3</EPSILON>
</DELTA>
</ALFA>
') p_xml
from dual
)
select
element_path, element_text
from
XMLTable(
'
for $i in $doc/descendant-or-self::*
return <element>
<element_path> {$i/string-join(ancestor-or-self::*/name(.), ''/'')} </element_path>
<element_content> {$i/text()}</element_content>
</element>
'
passing (select p_xml from params) as "doc"
columns
element_path varchar2(4000) path '//element_path',
element_text varchar2(4000) path '//element_content'
)

关于xml - 从 XML 到 Oracle PL/SQL 环境中的路径列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com