日期:2014-05-16  浏览次数:20936 次

xml数据的读取,sql应该怎么写?
system_config_info表的xml_value字段有如下值:

<?xml version="1.0" encoding="gb2312"?>
<Xml_Value> <value rdv="9">EXAM</value> 
            <value rdv="9">LIS</value> 
            <value rdv="9">ECG</value> 
            <value rdv="1">EMR</value>  
</Xml_Value>


sql是:
SELECT extractValue(value(t),'/value')
 FROM system_config_info,
      TABLE( xmlsequence ( extract(xml_value,  '/Xml_Value/value' ) )
           ) t
   
查询结果如下:
EXAM
LIS
ECG
EMR


如果我想取出rdv的值,查询结果实例:
9 EXAM
9 LIS
9 ECG
1 EMR

这样的sql应该怎么写??????

------解决方案--------------------
最好用oracle自带的parse xml package
------解决方案--------------------
with system_config_info as(
select xmltype('<?xml version="1.0" encoding="gb2312"?>
<Xml_Value> <value rdv="9">EXAM</value> 
            <value rdv="9">LIS</value> 
            <value rdv="9">ECG</value> 
            <value rdv="1">EMR</value>  
</Xml_Value>') xml_value from dual)
SELECT extractvalue(value(t),'value/@rdv'),extractValue(value(t),'value')
 FROM system_config_info,
      TABLE( xmlsequence ( extract(xml_value,  '/Xml_Value/value' ) )
           ) t
------解决方案--------------------

--参考此sql:
SQL> SELECT EXTRACTVALUE(x, '/Card/cd/@rdv') as pro
  2    FROM (SELECT XMLTYPE('<Card><cd rdv="7">小S</cd></Card>') x FROM dual);
 
PRO
--------------------------------------------------------------------------------
7
--@方式取属性