Ale*_*EEE 6 xml oracle parsing plsql
在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
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的示例在Oracle PL/SQL中与此相同?
在Oracle中有一个DBMS_XMLSTORE包,但它需要使用ROWSET和ROW元素的特定规范格式的XML片段.DBMS_XMLSTORE似乎不适用于XML属性.
此外,我不能100%确定是否需要创建XML片段的XSD并在我可以使用任何其他PL/SQL XML工具/查询之前在Oracle数据库上注册它.
谢谢!
Oracle的XML数据库实现有一些令人困惑的令人眼花缭乱的选项,并且在任何给定的场景中并不总是清楚(至少对我而言).在这种特殊情况下,您需要的是XMLTable(),它将XQuery转换为一组行.
首先我们创建一个表.
SQL> create table t23
2 (field01 number
3 , field02 number
4 , field03 char(1)
5 )
6 /
Table created.
SQL>
Run Code Online (Sandbox Code Playgroud)
然后我们填充它...
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>
Run Code Online (Sandbox Code Playgroud)
最后我们证明它有效......
SQL> select * from t23
2 /
FIELD01 FIELD02 F
---------- ---------- -
130 1700 C
131 1701 C
132 1702 C
SQL>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5828 次 |
| 最近记录: |