oracle xml文件是什么文件,如何从Oracle中的XML文档提取关键XML元素?

问题陈述:

您需要从XML文档中提取元素值的一部分/子集。

解:

我们可以利用支持XMLTYPE数据类型的Oracle EXTRACT函数。EXTARCT函数通过将结果作为XMLTYPE值返回来提供保留XML元素名称和属性构造的功能。

假设,我们在tmp_xml_gen表中的XML下面,我们要从中提取客户名称。

示例<?xml  version="1.0"?>

134

taylor.cauchon@internalmail

Taylor Cauchon

921

COMPLETE

485

COMPLETE

1528

COMPLETE

1672

COMPLETE

1319

COMPLETE

SQL:从XML文档中提取客户名称值SELECT extract (result, '/customers/customer/customer_id').getclobval() FROM tmp_xml_gen ;

输出:SQL语句中的行134

135

136

137

138

139

140

141

142

143

144

145

146

147

注意: XML上的EXTRACT函数操作与其他数据类型一起使用时,其行为有所不同。在日期或时间上使用时,EXTRACT将仅返回请求的日期或时间的一部分,例如月份。如果要求使用月份,则EXTRACT不会返回日期或时间,也不会返回任何“较小”的度量值,例如日,时等。当对XMLTYPE数据进行操作时,EXTRACT返回等于或低于匹配元素嵌套级别的所有内容。

我们可以使用XMLTABLE提取所需的信息。

码WITH cust AS

-- Customer details

(SELECT xt.customer_id,

xt.email,

xt.name,

x.result

FROM tmp_xml_gen x,

XMLTABLE('/customers/customer' PASSING x.RESULT

COLUMNS

customer_id VARCHAR2(10)  PATH 'customer_id',

email VARCHAR2(255) PATH 'email',

name VARCHAR2(255) PATH 'name') xt),

-- Order details

ord AS

(SELECT customer_id,

email,

name,

xt2.*

FROM cust t,

XMLTABLE('//订单/订单的通过t.result-

COLUMNS order_id VARCHAR2(4)  PATH 'order_id',

status VARCHAR2(10) PATH 'status' ) xt2)

SELECT * FROM ord;

输出:SQL上面的行很少134 taylor.cauchon@internalmail Taylor Cauchon  921     COMPLETE

134 taylor.cauchon@internalmail Taylor Cauchon  485     COMPLETE

134 taylor.cauchon@internalmail Taylor Cauchon  1528    COMPLETE

134 taylor.cauchon@internalmail Taylor Cauchon  1672    COMPLETE

134 taylor.cauchon@internalmail Taylor Cauchon  1319    COMPLETE

135 marc.domanski@internalmail  Marc Domanski   50      COMPLETE

135 marc.domanski@internalmail  Marc Domanski   99      COMPLETE

135 marc.domanski@internalmail  Marc Domanski   142     COMPLETE

135 marc.domanski@internalmail  Marc Domanski   195     COMPLETE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值