前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle解析xml

oracle解析xml

作者头像
overme
发布2022-01-17 08:29:54
1.5K0
发布2022-01-17 08:29:54
举报
文章被收录于专栏:数据开发笔记数据开发笔记

Oracle

测试数据
代码语言:javascript
复制
create table TEST_XML
(
  xmls CLOB
);
insert into TEST_XML (XMLS)
values ('<?xml version="1.0" encoding="GB2312"?>
<messages>
  <note id="501">
    <to>George</to>
    <from type="admin">John</from>
    <heading>Reminder</heading>
    <body>Dont forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from type="leader">George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
  <note id="503">
    <to>HJJ</to>
    <from type="user">HJJ</from>
    <heading>Re: Reminder</heading>
    <body>not</body>
  </note> 

</messages>');
commit;
xml转char
代码语言:javascript
复制
SELECT TO_CHAR(T.XMLS) 
FROM TEST_XML T;

这个方法只适合clob比较短的xml,如果xml字段过大会报错需要用SUBSTR()函数来切割

解析整个XML
代码语言:javascript
复制
SELECT B.*
FROM TEST_XML T,
XMLTABLE('/messages/note' PASSING XMLTYPE(T.XMLS)
              COLUMNS "ID" VARCHAR2(50) PATH '@id',
              "TO" VARCHAR2(50) PATH '/note/to',
              "FROM" VARCHAR2(50) PATH '/note/from' ,
              "FROM_TYPE" VARCHAR2(50) PATH '/note/from/@type' ,
              "HAEDING" VARCHAR2(50) PATH '/note/heading',
              "BODY" VARCHAR2(50) PATH '/note/body') B;
读取特定ID的记录

可以在PASSING路径中指定,或者在where条件中

代码语言:javascript
复制
SELECT B.*
FROM TEST_XML T,
XMLTABLE('/messages/note[@id=501]' PASSING XMLTYPE(T.XMLS)
              COLUMNS "ID" VARCHAR2(50) PATH '@id',
              "TO" VARCHAR2(50) PATH '/note/to',
              "FROM" VARCHAR2(50) PATH '/note/from' ,
              "FROM_TYPE" VARCHAR2(50) PATH '/note/from/@type' ,
              "HAEDING" VARCHAR2(50) PATH '/note/heading',
              "BODY" VARCHAR2(50) PATH '/note/body') B;
SELECT B.*
FROM TEST_XML T,
XMLTABLE('/messages/note' PASSING XMLTYPE(T.XMLS)
              COLUMNS "ID" VARCHAR2(50) PATH '@id',
              "TO" VARCHAR2(50) PATH '/note/to',
              "FROM" VARCHAR2(50) PATH '/note/from' ,
              "FROM_TYPE" VARCHAR2(50) PATH '/note/from/@type' ,
              "HAEDING" VARCHAR2(50) PATH '/note/heading',
              "BODY" VARCHAR2(50) PATH '/note/body') B
where B.ID = 501
获取特定属性的特定元素

也可也使用XMLTABLE

代码语言:javascript
复制
SELECT 
EXTRACTVALUE(XMLTYPE(T.XMLS),
                    '/messages/note[@id=502]/from') AS "form"
FROM TEST_XML T;

本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/04/14 16:31:17

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试数据
  • xml转char
  • 解析整个XML
  • 读取特定ID的记录
  • 获取特定属性的特定元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档