我正在使用Oracle 11g,表结构是
ID - NUMBER
xmlCOL - CLOB
这是表格中的XML数据
<DEPARTMENT ID="10" NAME="ACCOUNTING">
<EMPLOYEES>
<EMPLOYEE>
<ID>7934</ID>
<NAME>MILLER</NAME>
</EMPLOYEE>
</EMPLOYEES>
</DEPARTMENT>
我是否有可能根据我提供的值找到节点详细信息?对于例如
我可以搜索值MILLER并返回节点即。 /DEPARTMENT/EMPLOYEES/EMPLOYEE/NAME
?
答案 0 :(得分:0)
您可以使用extractvalue
获取节点的值并将其用于where
表达式 -
with t as
(
select xmltype('
<DEPARTMENT ID="10" NAME="ACCOUNTING">
<EMPLOYEES>
<EMPLOYEE>
<ID>7934</ID>
<NAME>MILLER</NAME>
</EMPLOYEE>
<EMPLOYEE>
<ID>123123</ID>
<NAME>JOHN</NAME>
</EMPLOYEE>
</EMPLOYEES>
</DEPARTMENT>
') as xml_
from dual
)
select column_value as node, extractvalue(column_value, '/*/NAME') as name, extractvalue(column_value, '/*/ID') as id
from t, table(xmlsequence(EXTRACT(t.xml_, '/DEPARTMENT/EMPLOYEES/*'))) s
where extractvalue(column_value, '/*/NAME') = 'MILLER'