Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да добавяте и премахвате xml тагове на съществуващи данни в колона xmltype в oracle

Можете да промените своя XML чрез добавяне/изтриване на тагове с нещо подобно на следното, с помощта на AppendChildXML и изтриване на XML .

В примера първата част връща вашия 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle предпочитани дължини на колони

  2. Какво е по-добре? Подзаявки или вътрешно свързване на десет таблици?

  3. java - преминаващ масив в съхранената процедура на Oracle

  4. Виждайки ORA-01858:намерен е нецифров знак, където се очаква число

  5. ORA-01950:няма привилегии в пространството за таблици „USERS“