У меня есть столбец XML в базе данных DB2, в котором есть несколько вхождений элемента с суффиксом _indexNumber, например:
<form>
<field name="surname" type="String">
<value>Smith</value>
</field>
<field name="given_name" type="String">
<value>John</value>
</field>
<field name="date" type="Date">
<date format="yyyy-MM-dd">
<value>2020-01-01</value>
</date>
</field>
<field index="1" name="transaction_id_1" setName="transactions" type="String">
<value>1</value>
</field>
<field index="1" name="transaction_time_1" setName="transactions" type="String">
<value>17:01:54</value>
</field>
<field index="1" name="transaction_city_1" setName="transactions" type="String">
<value>Montreal</value>
</field>
<field index="2" name="transaction_id_2" setName="transactions" type="String">
<value>2</value>
</field>
<field index="2" name="transaction_time_2" setName="transactions" type="String">
<value>17:35:21</value>
</field>
<field index="2" name="transaction_city_2" setName="transactions" type="String">
<value>Montreal</value>
</field>
</form>
Я хочу создать представление, используя SQL с этим выводом :
--------------------------------------------------------------------------------------------
| surname | given_name | date | transaction_id | transaction_time | transaction_city |
--------------------------------------------------------------------------------------------
| Smith | John | 2020-01-01 | 1 | 17:01:54 | Montreal |
--------------------------------------------------------------------------------------------
| Smith | John | 2020-01-01 | 2 | 17:35:21 | Montreal |
--------------------------------------------------------------------------------------------
До сих пор я использовал функцию XMLTABLE и легко мог работать с 1 транзакцией:
CREATE OR REPLACE VIEW VIEW_XML AS
SELECT X.*
FROM TEST_XML,
XMLTABLE('$i/form' passing col_xml AS "i"
COLUMNS
surname varchar(255) PATH 'field[@name=''surname'']/value',
given_name varchar(255) PATH 'field[@name=''given_name'']/date/value',
date varchar(255) PATH 'field[@name=''date'']/value',
transaction_id varchar(255) PATH 'field[@name=''transaction_id_1'']/value',
transaction_time varchar(255) PATH 'field[@name=''transaction_time_1'']/value',
transaction_city varchar(255) PATH 'field[@name=''transaction_city_1'']/value'
) AS X
И это дает следующий результат:
--------------------------------------------------------------------------------------------
| surname | given_name | date | transaction_id | transaction_time | transaction_city |
--------------------------------------------------------------------------------------------
| Smith | John | 2020-01-01 | 1 | 17:01:54 | Montreal |
--------------------------------------------------------------------------------------------
Как я могу получить вторую транзакцию в новом ряду?