如何从Oracle表中的XML检索特定数据

时间:2019-02-13 07:39:08

标签: sql xml oracle extract extract-value

我有一个oracle表,其中有一个存储XML的列。 XML具有以下语法:

<?xml version="1.0"?>
<MessageData>
  <TextblockParameters>
    <TextblockParameter>
      <tagName>BUSINESSPROCESSID</tagName>
      <value>RETAIL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>SEGMENT</tagName>
      <value>RESIDENTIAL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>TRANSACTIONTYPE</tagName>
      <value>PURCHASE</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>LANGUAGE</tagName>
      <value>EST</value>
    </TextblockParameter>
  </TextblockParameters>
</MessageData>

现在我需要从<value></Value>的所有4个地方获取信息。请解决此问题,不知道 Extractvalue 是否是最佳解决方案

2 个答案:

答案 0 :(得分:4)

您可以为此使用XMLTABLE函数(see examples

SELECT t.foo, xt.*
FROM t, XMLTABLE('//TextblockParameter'
    PASSING t.xmlcol
    COLUMNS
        tagName VARCHAR2(100) PATH './tagName',
        value VARCHAR2(100) PATH './value'
) xt;

Demo on db<>fiddle

答案 1 :(得分:-1)

您可以使用

# python3 net.py 
socket 4
Address 192.168.6.1
Address 17213632
Adding default route: 101
select extract(col1, '//value') from t;
create table t (col1 xmltype);
1 rows affected
insert into t values ('
<MessageData>
  <TextblockParameters>
    <TextblockParameter>
      <tagName>BUSINESSPROCESSID</tagName>
      <value>RETAIL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>SEGMENT</tagName>
      <value>RESIDENTIAL</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>TRANSACTIONTYPE</tagName>
      <value>PURCHASE</value>
    </TextblockParameter>
    <TextblockParameter>
      <tagName>LANGUAGE</tagName>
      <value>EST</value>
    </TextblockParameter>
  </TextblockParameters>
</MessageData>');
| EXTRACT(COL1,'//VALUE')                                                                                  |
| :------------------------------------------------------------------------------------------------------- |
| <value>RETAIL</value><br><value>RESIDENTIAL</value><br><value>PURCHASE</value><br><value>EST</value><br> |

db <>提琴here