PLSQL中的XML解析

问题描述:

我有一个以下格式的XML并需要将数据插入到表中。PLSQL中的XML解析

数据是动态的,需要插入到PL/SQL表中。请你指导我如何解决这个问题。

<?xml version="1.0" encoding="UTF-8"?> 
<Result> 
    <Name SN="ABC" PID="PID1"> 
     <Name SN="111" PID="P01" /> 
     <Name SN="222" PID="P02" /> 
    </Name > 
    <Name SN="PQR" PID="PID2"> 
     <Name SN="100" PID="P04" /> 
     <Name SN="200" PID="P05" /> 
     <Name SN="300" PID="P05" /> 
     <Name SN="400" PID="P06" /> 
    </Name > 
</Result>` 

查询:

 SELECT XXCSS_AUTOTEST_INPUT_OBJ (
        SUBSTR (
        EXTRACT (VALUE (P), '/Device').getstringval(), 
        INSTR (
         EXTRACT (VALUE (P), '/Device').getstringval(), 
         '"', 
         1, 
         1) 
        + 1, 
        INSTR (
         EXTRACT (VALUE (P), '/Device').getstringval(), 
         '"', 
         1, 
         2) 
        - INSTR (
          EXTRACT (VALUE (P), '/Device').getstringval(), 
          '"', 
          1, 
          1) 
        - 1), 
        SUBSTR (
        EXTRACT (VALUE (P), '/Device').getstringval(), 
        INSTR (
         EXTRACT (VALUE (P), '/Device').getstringval(), 
         '"', 
         1, 
         5) 
        + 1, 
        INSTR (
         EXTRACT (VALUE (P), '/Device').getstringval(), 
         '"', 
         1, 
         6) 
        - INSTR (
          EXTRACT (VALUE (P), '/Device').getstringval(), 
          '"', 
          1, 
          5) 
        - 1)) 
      BULK COLLECT INTO p_auto_test_out 
      FROM TABLE (
        XMLSEQUENCE (EXTRACT (l_xml_file, '//Result/Device'))) P; 

我能读拳头两个标签ABC和PQR和无法读取子标签。

+2

什么是错误?你可以发布你的SQL吗? – Noor

+0

感谢您的回复。我正在使用下面的SQL – Syed

以下是可能对您有帮助的示例SQL。根据您的需求调整它。在SQL中查询xml有许多可用的在线文档。您可以按照这些示例编写复杂的查询。

Declare @xml XML ='<?xml version="1.0" encoding="UTF-8"?> 
<Result> 
    <Name SN="ABC" PID="PID1"> 
     <Name SN="111" PID="P01" /> 
     <Name SN="222" PID="P02" /> 
    </Name > 
    <Name SN="PQR" PID="PID2"> 
     <Name SN="100" PID="P04" /> 
     <Name SN="200" PID="P05" /> 
     <Name SN="300" PID="P05" /> 
     <Name SN="400" PID="P06" /> 
    </Name > 
</Result>' 


SELECT mytable.mycol.value('(../@SN)[1]','VARCHAR(50)') [Parent SN], 
     mytable.mycol.value('(../@PID)[1]','VARCHAR(50)') [Parent PID], 
     mytable.mycol.value('(@SN)[1]','INT') [SN], 
     mytable.mycol.value('(@PID)[1]','VARCHAR(50)') [PID] 
FROM @xml.nodes(N'/Result/Name/*') AS mytable(mycol)