简体   繁体   English

Oracle 11g,XML

[英]Oracle 11g, XML

I am working on Oracle 11g and table structure is 我正在使用Oracle 11g,表结构是

ID - NUMBER
xmlCOL - CLOB

This is my XML data in the table 这是我在表中的XML数据

<DEPARTMENT ID="10" NAME="ACCOUNTING">
    <EMPLOYEES>
        <EMPLOYEE>
            <ID>7934</ID>
            <NAME>MILLER</NAME>
        </EMPLOYEE>
    </EMPLOYEES>
</DEPARTMENT>

Is it possible that I can find the node details based on the value I provide? 我是否可以根据提供的值找到节点详细信息? For eg 例如

Can I search for value MILLER and it returns the node viz. 我可以搜索值MILLER并返回节点viz。 /DEPARTMENT/EMPLOYEES/EMPLOYEE/NAME ? /DEPARTMENT/EMPLOYEES/EMPLOYEE/NAME

You can to use extractvalue to get value of node and use it into where expression - 您可以使用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'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM