2016-03-05 79 views
-2

我有一個以下格式的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

回答

0

以下是可能對您有幫助的示例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)