ai didi

sql - 如何在Oracle中获取 "Open"XML数据

转载 作者:行者123 更新时间:2023-12-04 14:43:24 24 4
gpt4 key购买 nike

这是我想用 PL/SQL 重写的一些 TSQL 的示例。

DECLARE @xml XML

SET @xml = '<theRange>
<theRow><First>Bob</First><Last>Smith</Last><Age>30</Age></theRow>
<theRow><First>Sue</First><Last>Jones</Last><Age>34</Age></theRow>
<theRow><First>John</First><Last>Bates</Last><Age>40</Age></theRow>
</theRange>'

;WITH OpenedXML AS (
SELECT r.value('First[1]','varchar(50)') AS First,
r.value('Last[1]','varchar(50)') AS Last,
r.value('Age[1]','int') AS Age
FROM @xml.nodes('//theRange/theRow') AS Row(r)
)
SELECT *
FROM OpenedXML
WHERE Age BETWEEN 30 AND 35

谁能给我一些指导。

最佳答案

本 SO 中描述了几种方法:

Oracle Pl/SQL: Loop through XMLTYPE nodes

更新:这很简单,因为这两种方法都是纯 SQL(您可以从 PL/SQL 或任何与数据库交互的工具调用此 SQL):

SQL> WITH openedXml AS (
2 SELECT extractvalue(column_value, '/theRow/First') FIRST,
3 extractvalue(column_value, '/theRow/Last') LAST,
4 to_number(extractvalue(column_value, '/theRow/Age')) Age
5 FROM TABLE(XMLSequence(XMLTYPE('<theRange>
6 <theRow><First>Bob</First><Last>Smith</Last><Age>30</Age></theRow>
7 <theRow><First>Sue</First><Last>Jones</Last><Age>34</Age></theRow>
8 <theRow><First>John</First><Last>Bates</Last><Age>40</Age></theRow>
9 </theRange>').extract('/theRange/theRow')))
10 )
11 SELECT *
12 FROM openedxml
13 WHERE age BETWEEN 30 AND 35;

FIRST LAST AGE
--------- -------- -----
Bob Smith 30
Sue Jones 34

关于sql - 如何在Oracle中获取 "Open"XML数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602820/

24 4 0
文章推荐: wpf - 将 PreviewKeyDown 中收到的键转换为字符串
文章推荐: gradle - 为什么要使用 Gradle 分离配置?
文章推荐: ansible - 尝试使用 ansible 在 vi​​rtualenv 中安装时权限被拒绝
文章推荐: xslt - 更改 XSL 转换中的命名空间值?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com