0

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

例如。

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

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

4

1 回答 1

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
于 2014-09-01T08:07:03.467 回答