Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle11g,XML_Xml_Oracle - Fatal编程技术网

oracle11g,XML

oracle11g,XML,xml,oracle,Xml,Oracle,我正在开发Oracle11g,表结构是 ID - NUMBER xmlCOL - CLOB 这是表中的XML数据 <DEPARTMENT ID="10" NAME="ACCOUNTING"> <EMPLOYEES> <EMPLOYEE> <ID>7934</ID> <NAME>MILLER</NAME> </EMPLO

我正在开发Oracle11g,表结构是

ID - NUMBER
xmlCOL - CLOB
这是表中的XML数据

<DEPARTMENT ID="10" NAME="ACCOUNTING">
    <EMPLOYEES>
        <EMPLOYEE>
            <ID>7934</ID>
            <NAME>MILLER</NAME>
        </EMPLOYEE>
    </EMPLOYEES>
</DEPARTMENT>
是否可以根据我提供的值查找节点详细信息?例如

我可以搜索值MILLER,它返回节点viz/DEPARTMENT/EMPLOYEES/EMPLOYEES/NAME?

您可以使用extractvalue获取节点的值,并将其用于表达式-

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'

是的,这是可能的。但是你自己做过什么吗?你认为什么是节点?这个这个ArkadiuszŁukasiewicz,我用INSTR和SUBSTR编写了一个大函数来获取所有节点。当我在函数中传递值7934作为参数时,它将返回我/部门/员工/员工/ID;当我传递值MILLER作为参数时,它将返回/部门/员工/员工/姓名。我一直在努力寻找,是否有一个内置在Oracle 11g中,以获得相同的输出。我的实际XML是不同的。这只是一个XML实践。这有点冗长。