Oracle 11g,XML

时间:2017-07-24 08:47:51

标签: xml oracle

我正在使用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

1 个答案:

答案 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'