加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何解析Oracle PL / SQL中的简单XML片段并将其加载到全局临时表

发布时间:2020-12-12 16:23:40 所属栏目:百科 来源:网络整理
导读:在SQL Server中,很容易解析包含由属性构造的简单 XML片段的vachar变量,并将其加载到临时表中 – 请参阅下面的示例: declare @UpdateXML VARCHAR(8000)set @UpdateXML='ArrayOfRecords Record Field01="130" Field02="1700" Field03="C" / Record Field01="1
在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并在我可以使用任何其他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>

然后我们填充它…

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读