首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在oracle中搜索xml以获取值

在oracle中搜索xml以获取值
EN

Stack Overflow用户
提问于 2011-07-13 17:57:38
回答 2查看 4.6K关注 0票数 0

我需要搜索包含xml数据的表msg_xmldata列msg_data,并检查一个条件

代码语言:javascript
复制
<ns1:aoc-done>1</ns1:aoc-done>

我尝试过像'%AoC%‘这样的msg_data.getstringval(),但没有成功:(

请帮帮忙。

XML

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:charge-request xmlns:ns1="api">
    <ns1:spec-ver>1.0</ns1:spec-ver>
    <ns1:transaction-id>2315176</ns1:transaction-id>
    <ns1:timestamp>1203045318</ns1:timestamp>
    <ns1:content-info>
        <ns1:rating-level>99999</ns1:rating-level>
    </ns1:content-info>
    <ns1:aoc-flag>false</ns1:aoc-flag>
    <ns1:optional-charge-params>
        <ns1:price>
            <ns1:amount>3.0</ns1:amount>
        </ns1:price>
    </ns1:optional-charge-params>
    <ns1:success>true</ns1:success>
    <ns1:aoc-done>1</ns1:aoc-done>
</ns1:charge-request>


select x.msg_data.getclobval()
from ccgw_msg_xmldata x
where x.msg_data.getstringval() like %1%
and x.msg_time < to_date('2011-06-30 00:00:01', 'YYYY-MM-DD HH24:MI:SS');
EN

回答 2

Stack Overflow用户

发布于 2011-07-13 21:00:45

使用EXTRACTVALUE函数检索使用XPath谓词的XML的任何部分。如下所示:

代码语言:javascript
复制
SELECT x.msg_data.getclobval()
FROM   ccgw_msg_xmldata x
WHERE  EXTRACTVALUE(x.msg_data, '/ns1:charge-request/ns1:aoc-done') = 1
AND    x.msg_time < to_date('2011-06-30 00:00:01', 'YYYY-MM-DD HH24:MI:SS');

文档:http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb04cre.htm#BABDGFFH

票数 2
EN

Stack Overflow用户

发布于 2011-07-15 16:50:50

从11gR2开始,EXTRACTVALUE的使用是deprecated。建议使用XMLTABLE或XMLQUERY,但使用YMMV。

代码语言:javascript
复制
SELECT x.msg_data
FROM   ccgw_msg_xmldata x,
       xmltable(xmlnamespaces(default 'api'),
       '/charge-request'
       passing x.msg_data
       columns
       aocdone number path 'aoc-done') x2
WHERE  x2.aocdone = 1
AND    x.msg_time < to_date('2011-06-30 00:00:01', 'YYYY-MM-DD HH24:MI:SS');

SELECT
  xmlquery('declare default element namespace "api"; (: :)
            for $aocdone in $doc/charge-request/aoc-done
            where $aocdone = 1
            return $doc'
           passing x.msg_data as "doc"
           returning content)
FROM ccgw_msg_xmldata x
WHERE x.msg_time < to_date('2011-06-30 00:00:01', 'YYYY-MM-DD HH24:MI:SS');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6677123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档