PLSQL 中的 XML 解析

Posted

技术标签:

【中文标题】PLSQL 中的 XML 解析【英文标题】:XML Parsing in PLSQL 【发布时间】:2016-03-05 22:18:47 【问题描述】:

我有以下格式的 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,但无法读取子标签。

【问题讨论】:

错误是什么?你也可以发布你的sql吗? 感谢您的回复。我正在使用下面的 SQL 【参考方案1】:

这里是可能对您有所帮助的示例 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)

【讨论】:

以上是关于PLSQL 中的 XML 解析的主要内容,如果未能解决你的问题,请参考以下文章

使用 PLSQL 将 XML 解析为数据库表

PLSQL:将数据从 XML 解析并插入到表中

oracle plsql:如何解析 XML 并插入到表中

plsql解析文本文件的输出并插入表

plsql美化器不能解析文本是怎么回事

plsql developer不能连接oracle,出现12154 无法解析指定的连接标符?