【问题标题】:How to "Open" XML data in Oracle如何在 Oracle 中“打开”XML 数据
【发布时间】:2010-12-08 20:06:30
【问题描述】:

这是我想用 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

谁能在这里给我一些指导。

【问题讨论】:

    标签: sql sql-server xml oracle plsql


    【解决方案1】:

    此 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
    

    【讨论】:

    • 你好文森特。这是一个很好的链接(+1),但我不知道那里的答案如何解决我的问题。有两种回应。一种是 SQL Plus 解决方案,另一种是 PLSQL 解决方案,但它使用了一种称为 XMLTYPE 的东西,但没有给出完整的答案。如果我知道更多,那可能会为我解决问题。
    • @wcm:我对 SQL Server 了解不多,但在这个例子中,synthax 看起来很像 Oracle。节点 = XMLSequence + 提取 -- 值 = 提取值
    • 你必须明白,MS 尽可能多地从 Oracle 窃取 :o)。在 TSQL 中,您倾向于将解决方案分成不同的步骤。似乎在 Oracle 中,您尝试在一次选择中完成所有操作。在我的代码中,我将 @xml 声明为 XML 数据类型,然后设置值,然后在我的选择中使用该值。您的代码在选择正文中显式创建 XMLTYPE。 Oracle 解决方案可能更高效,但我认为 TSQL 更易于阅读和理解。这是一个很好的答案。我希望我能不止一次投票给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2021-12-30
    • 2019-01-28
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多