从LOB内容中获取部分消息

时间:2014-09-01 06:45:08

标签: sql oracle substring xml-column

我在LOB(大对象)列中有一些XML内容(小于2000字节)。我使用dbms_lob_substr(messagebody)来获取实际的XML内容,但我需要获取特定节点的确切值。

例如

<first name>xyz</first name>
<last name>abcd</last name>

我需要说<first name>的值。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您的XML似乎缺少根节点?如果您的XML数据与显示它一样,那么如果将其放在虚拟根节点中,则可以使用XMLTable()函数来解析它,例如:

select x.firstname
  from mytable,
  xmltable(
   '/rootnode'
   passing xmltype('<rootnode>'||myclobcol||'</rootnode>')
   columns
      firstname varchar2(100) path 'firstname'
  ) x

如果您需要同时获取多个值,只需添加到columns子句:

select x.*
  from mytable,
  xmltable(
   '/rootnode'
   passing xmltype('<rootnode>'||myclobcol||'</rootnode>')
   columns
      firstname varchar2(100) path 'firstname',
      lastname  varchar2(100) path 'lastname',
      middleini varchar2(10)  path 'middleinitial'
  ) x