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