如何使用ORACLE SQL从XML分别提取可重复的json节点值? [英] How to extract repeatable json node values separately from XML using ORACLE SQL?

查看:100
本文介绍了如何使用ORACLE SQL从XML分别提取可重复的json节点值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下XML,我想分别提取json参数"serviceNumber"的值 我尝试使用EXTRACT函数,但是将结果串联在一起,但我希望将它们分开.

I have the following XML and i want to extract the values of json parameter "serviceNumber" separately i tried using EXTRACT function but i got the results concatenated but i want them separated.

<Input>
   <Header>
      <User-Agent></User-Agent>
      <Accepted-Language></Accepted-Language>
      <Authorization></Authorization>
      <Date>Mon, 27 Feb 2017 21:39:55 GMT</Date>
      <Username></Username>
      <Test />
      <UserInfo />
      <msisdn />
      <imsi />
      <X-Forwarded-For></X-Forwarded-For>
      <x-Client-IP></x-Client-IP>
      <Location />
   </Header>
   <URI></URI>
   <ServiceName></ServiceName>
   <PrimaryKey></PrimaryKey>
   <Parameters>
      <Parameter1></Parameter1>
      <Parameter2 />
      <Parameter3 />
   </Parameters>
   <Body>
      <json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd">
         <json:string name="transactionType"></json:string>
         <json:array name="payments">
            <json:object>
               <json:string name="amount"></json:string>
               <json:string name="serviceNumber">536888669</json:string>
               <json:string name="serviceType"></json:string>
               <json:string name="accountNumber"></json:string>
            </json:object>
            <json:object>
               <json:string name="amount"></json:string>
               <json:string name="serviceNumber">535394441</json:string>
               <json:string name="serviceType"></json:string>
               <json:string name="accountNumber"></json:string>
            </json:object>
            <json:object>
               <json:string name="amount"></json:string>
               <json:string name="serviceNumber">138422262</json:string>
               <json:string name="serviceType"></json:string>
               <json:string name="accountNumber"></json:string>
            </json:object>
            <json:object>
               <json:string name="amount"></json:string>
               <json:string name="serviceNumber">505809543</json:string>
               <json:string name="serviceType"></json:string>
               <json:string name="accountNumber"></json:string>
            </json:object>
            <json:object>
               <json:string name="amount"></json:string>
               <json:string name="serviceNumber">138422338</json:string>
               <json:string name="serviceType"></json:string>
               <json:string name="accountNumber"></json:string>
            </json:object>
         </json:array>
      </json:object>
   </Body>
</Input>

我想要类似的输出

serviceNumber
-------------
536888669
535394441
138422262
505809543
138422338

推荐答案

使用XMLTABLE:

SELECT x.serviceNumber
FROM   your_table t
       CROSS JOIN
       XMLTABLE(
         XMLNAMESPACE( 'http://www.yourserver.url/json/' AS "json" ),
         '//root/Input/Body/json:object/json:array/json:object/'
         PASSING XMLTYPE(
           '<?xml version="1.0" encoding="utf-8"?>' ||
           '<root xmlns:json="http://www.yourserver.url/json/">' ||
           t.your_xml_column ||
           '</root>'
         )
         COLUMNS serviceNumber NUMBER PATH './json:string[@name="serviceNumber"]'
       ) x

这篇关于如何使用ORACLE SQL从XML分别提取可重复的json节点值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆