Как добавлять и удалять теги xml существующих данных внутри столбца xmltype в oracle

xml
Вопрос: Я создал следующую таблицу: Вот пример строки данных: Внутри этой таблицы в столбце SALPROFILE данные каждого столбца содержат большие данные xml, такие как следующий пример: FMCSC00015 2016 1 BASIC PAY 35600 ASSOCIATION SUBSCRIPTION 240 TELEPHONE ALLOWANCE 800 HOUSE RENT DEDUCTION 2587.5 MEDICAL ALLOWANCE 700 GAS BILL 450 LIFE INSURANCE PREMIUM (D) 1718

Вопрос:

Я создал следующую таблицу: enter image description here

Вот пример строки данных:

enter image description here

Внутри этой таблицы в столбце SALPROFILE данные каждого столбца содержат большие данные xml, такие как следующий пример:

<employee> <id>FMCSC00015</id> <year>2016</year> <month>1</month> <PAYMSTR_SALHDNM>BASIC PAY</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>35600</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>ASSOCIATION SUBSCRIPTION</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>240</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>TELEPHONE ALLOWANCE</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>800</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>HOUSE RENT DEDUCTION</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>2587.5</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>MEDICAL ALLOWANCE</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>700</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>GAS BILL</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>450</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>LIFE INSURANCE PREMIUM (D)</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>1718</PAYMSTR_AMOUNT> </employee>

Я хочу добавить и удалить теги xml из вышеприведенного образца. Например, я хочу удалить

<PAYMSTR_SALHDNM>BASIC PAY</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>35600</PAYMSTR_AMOUNT>

и я хочу добавить

<PAYMSTR_SALHDNM>BANK LOAN</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>23490</PAYMSTR_AMOUNT>

Как я могу это сделать. Это возможно сделать это, не отслеживая все данные xml, чтобы сделать его более быстрым. Я видел, что функция Appendchildxml устарела

Ответ №1

Вы можете изменить свой XML, добавив/удалив теги с помощью следующего: с помощью AppendChildXML и deleteXML.

В этом примере первая часть возвращает ваш XML с одним тегом больше, а второй столбец удаляет тег, который соответствует условию между […]:

with xmlTab(val) as ( select xmlType(‘<employee> <id>FMCSC00015</id> <year>2016</year> <month>1</month> <PAYMSTR_SALHDNM>BASIC PAY</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>35600</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>ASSOCIATION SUBSCRIPTION</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>240</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>TELEPHONE ALLOWANCE</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>800</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>HOUSE RENT DEDUCTION</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>2587.5</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>MEDICAL ALLOWANCE</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>700</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>GAS BILL</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>450</PAYMSTR_AMOUNT> <PAYMSTR_SALHDNM>LIFE INSURANCE PREMIUM (D)</PAYMSTR_SALHDNM> <PAYMSTR_AMOUNT>1718</PAYMSTR_AMOUNT> </employee>’) from dual ) select APPENDCHILDXML( val, ’employee’, XMLType(‘<PAYMSTR_SALHDNM>SONALI BANK LOAN-4</PAYMSTR_SALHDNM>’) ) as APPEND, DELETEXML(val,’/employee/PAYMSTR_AMOUNT[.=»1718″]’) AS DEL from xmlTab

XML для добавления может быть динамически построен путем чтения данных из другой таблицы, например, таким образом:

with test as ( select ‘PAYMSTR_SALHDNM’ tag, ‘SONALI BANK LOAN-4’ val from dual union all select ‘PAYMSTR_SALHDNM’ tag, ‘GAS BILL’ val from dual ) select XMLELEMENT(tag, val) from test

Оцените статью
Добавить комментарий