gpt4 book ai didi

xml - 您如何在 Oracle PL/SQL 中解析一个简单的 XML 片段并将其加载到全局临时表中?

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

在 SQL Server 中,很容易解析包含用属性构造的简单 XML 片段的 vachar 变量,并将其加载到临时表中 - 请参见下面的示例:

declare @UpdateXML VARCHAR(8000)

set @UpdateXML='<ArrayOfRecords>
<Record Field01="130" Field02="1700" Field03="C" />
<Record Field01="131" Field02="1701" Field03="C" />
<Record Field01="132" Field02="1702" Field03="C" />
</ArrayOfRecords>'

DECLARE @hdoc int

EXEC sp_xml_preparedocument @hdoc OUTPUT, @UpdateXML

INSERT
INTO #tblTemp(
[Field01],
[Field02],
[Field03]
)
SELECT *
FROM OPENXML(@hdoc, '//ArrayOfRecords/Record')
WITH ( Field01 int,
Field02 int,
Field03 char(1)
)

EXEC sp_xml_removedocument @hdoc

是否有一个简单的示例在 Oracle PL/SQL 中执行与此等效的操作?

在 Oracle 中有一个 DBMS_XMLSTORE 包,但它需要使用 ROWSET 和 ROW 元素的特定规范格式的 XML 片段。 DBMS_XMLSTORE 似乎不适用于 XML 属性。

此外,我不能 100% 确定是否需要为我的 XML 片段创建 XSD 并将其注册到 Oracle 数据库,然后才能使用任何其他 PL/SQL XML 工具/查询。

谢谢!

最佳答案

Oracle 的 XML DB 实现有大量令人眼花缭乱的选项,并且并不总是很清楚(至少对我而言)哪一个适用于任何给定的场景。在这种特殊情况下,您想要的是 XMLTable() ,它将 XQuery 转换为一组行。

首先我们创建一个表。

SQL> create table t23
2 (field01 number
3 , field02 number
4 , field03 char(1)
5 )
6 /

Table created.

SQL>

然后我们填充它......

SQL> declare
2 x varchar2(2000) := '<ArrayOfRecords>
3 <Record Field01="130" Field02="1700" Field03="C" />
4 <Record Field01="131" Field02="1701" Field03="C" />
5 <Record Field01="132" Field02="1702" Field03="C" />
6 </ArrayOfRecords>';
7 begin
8 insert into t23
9 select *
10 from xmltable
11 ( '/ArrayOfRecords/Record'
12 passing xmltype (x)
13 columns f1 number path '@Field01'
14 , f2 number path '@Field02'
15 , f3 char(1) path '@Field03'
16 )
17 ;
18 end;
19 /

PL/SQL procedure successfully completed.

SQL>

最后我们证明它有效......

SQL> select * from t23
2 /

FIELD01 FIELD02 F
---------- ---------- -
130 1700 C
131 1701 C
132 1702 C

SQL>

关于xml - 您如何在 Oracle PL/SQL 中解析一个简单的 XML 片段并将其加载到全局临时表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2203825/

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