Я новичок в PL / SQL, и мне дали эту задачу. У меня есть XML-сообщения, которые хранятся в таблице Receive_XML с именем поля XML_DATA. Были проблемы, когда отправляющее местоположение отправляет разделенные последовательности, что вызывает их проблемы при получении обратно. Разделенная последовательность - это место, где мы получаем последовательность № 1, затем последовательность № 2, а затем снова последовательность № 1.
Каков наилучший способ поиска в таблице Receive_XML для поиска случаев, когда любая последовательность повторяетсяболее одного раза, не зная порядковый номер. Вот пример XML-записи, которую мы получаем.
<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>
</SEQUENCES>
</PRODUCTION_SEQUENCE>
</MESSAGE>
Спасибо за любую помощь, которую вы можете предоставить.
Билл
То, что я наконец нашел, сработало для меня:
select SEQUENCE_ID, count(SEQUENCE_ID) Counter
from (
select SEQUENCE_ID
from Receive_XML tbl,
xmltable('/MESSAGE/PRODUCTION_SEQUENCE/SEQUENCES/SEQUENCE'
PASSING xmltype(tbl.xml_data)
COLUMNS SEQUENCE_ID VARCHAR2(30) PATH '@SEQUENCE_ID')
where tbl.id = 4451
) rs
group by SEQUENCE_ID;