我在 LOB(大对象)列中有一些 XML 内容(小于 2000 字节)。我曾经dbms_lob_substr(messagebody)
获取实际的 XML 内容,但我需要获取特定节点的确切值。
例如。
<first name>xyz</first name>
<last name>abcd</last name>
我需要 say 的值<first name>
。我怎样才能做到这一点?
我在 LOB(大对象)列中有一些 XML 内容(小于 2000 字节)。我曾经dbms_lob_substr(messagebody)
获取实际的 XML 内容,但我需要获取特定节点的确切值。
例如。
<first name>xyz</first name>
<last name>abcd</last name>
我需要 say 的值<first name>
。我怎样才能做到这一点?
您的 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