Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Xml 在字符串中查找重复的子字符串_Xml_Oracle_Search_Plsql_Duplicates - Fatal编程技术网

Xml 在字符串中查找重复的子字符串

Xml 在字符串中查找重复的子字符串,xml,oracle,search,plsql,duplicates,Xml,Oracle,Search,Plsql,Duplicates,我是PL/SQL新手,我被赋予了这个任务。我将XML消息存储在一个Receive_XML表中,该表的字段名为XML_数据。在发送位置发送拆分序列时出现了一些问题,这会在它们接收回拆分序列时造成问题。分割序列是我们接收序列1,然后是序列2,然后是序列1 搜索Receive_XML表以查找任何序列重复多次而不知道序列号的实例的最佳方法是什么。下面是我们收到的一个XML记录的示例 生产顺序 2019-10-29 10:00:01 514236947 578645897 514236947 57864

我是PL/SQL新手,我被赋予了这个任务。我将XML消息存储在一个Receive_XML表中,该表的字段名为XML_数据。在发送位置发送拆分序列时出现了一些问题,这会在它们接收回拆分序列时造成问题。分割序列是我们接收序列1,然后是序列2,然后是序列1

搜索Receive_XML表以查找任何序列重复多次而不知道序列号的实例的最佳方法是什么。下面是我们收到的一个XML记录的示例

生产顺序 2019-10-29 10:00:01 514236947 578645897 514236947 578645897 514236947 578645897
这个xpath示例似乎可以工作:

with Receive_XML as (
select xmltype('
<MESSAGE>
     <HEADER>
<MESSAGE_TYPE>ProductionSequence</MESSAGE_TYPE>
         <TIMESTAMP>2019-10-29 10:00:01</TIMESTAMP>
     </HEADER>
     <PRODUCTION_SEQUENCE>
         <SEQUENCES>
             <SEQUENCE SEQUENCE_ID="8764          " SEQUENCE_ID_PARENT="">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
             <SEQUENCE SEQUENCE_ID="6452          " 
SEQUENCE_ID_PARENT="8764">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
             <SEQUENCE SEQUENCE_ID="8764          " 
SEQUENCE_ID_PARENT="6452">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
         <SEQUENCE SEQUENCE_ID="6452          " SEQUENCE_ID_PARENT="8764">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
         </SEQUENCES>
     </PRODUCTION_SEQUENCE>
</MESSAGE>
')  XML_DATA from dual )
select
xt.dup
FROM   Receive_XML xt,
       XMLTABLE('//SEQUENCE'
         PASSING xt.xml_data
         COLUMNS 
          dup VARCHAR2(20)  PATH '@SEQUENCE_ID[.= ../preceding-sibling::SEQUENCE/@SEQUENCE_ID]'
        ) xt
where dup is not null        

这个xpath示例似乎可以工作:

with Receive_XML as (
select xmltype('
<MESSAGE>
     <HEADER>
<MESSAGE_TYPE>ProductionSequence</MESSAGE_TYPE>
         <TIMESTAMP>2019-10-29 10:00:01</TIMESTAMP>
     </HEADER>
     <PRODUCTION_SEQUENCE>
         <SEQUENCES>
             <SEQUENCE SEQUENCE_ID="8764          " SEQUENCE_ID_PARENT="">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
             <SEQUENCE SEQUENCE_ID="6452          " 
SEQUENCE_ID_PARENT="8764">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
             <SEQUENCE SEQUENCE_ID="8764          " 
SEQUENCE_ID_PARENT="6452">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
         <SEQUENCE SEQUENCE_ID="6452          " SEQUENCE_ID_PARENT="8764">
                 <PIECE_GROUPS>
                     <PIECE_GROUP>
                         <PIECE>
<PIECE_ID>514236947</PIECE_ID>
                         </PIECE>
                         <PIECE>
<PIECE_ID>578645897</PIECE_ID>
                         </PIECE>
                     </PIECE_GROUP>
                 </PIECE_GROUPS>
             </SEQUENCE>
         </SEQUENCES>
     </PRODUCTION_SEQUENCE>
</MESSAGE>
')  XML_DATA from dual )
select
xt.dup
FROM   Receive_XML xt,
       XMLTABLE('//SEQUENCE'
         PASSING xt.xml_data
         COLUMNS 
          dup VARCHAR2(20)  PATH '@SEQUENCE_ID[.= ../preceding-sibling::SEQUENCE/@SEQUENCE_ID]'
        ) xt
where dup is not null        
请尝试以下PL/SQL。它计算@SEQUENCE\u ID属性。因此,大于1的值意味着它是重复的

PL/SQL

请尝试以下PL/SQL。它计算@SEQUENCE\u ID属性。因此,大于1的值意味着它是重复的

PL/SQL


这将使我走上我需要的道路。我不知道阅读XML这么容易。我试着把它当作一个字符串来处理,因此标题就是这样。非常感谢你的帮助!这将使我走上我需要的道路。我不知道阅读XML这么容易。我试着把它当作一个字符串来处理,因此标题就是这样。非常感谢你的帮助!我来看看。谢谢这正是我所需要的。我会检查一下。谢谢这正是我需要的。
+----+-------------+---------+
| ID | SEQUENCE_ID | Counter |
+----+-------------+---------+
|  1 |        6452 |       1 |
|  1 |        8764 |       2 |
+----+-------------+---------+