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

Извличане на стойност от xml clob с пространство от имена с помощта на Oracle pl/sql

Вашият актуализиран XML има пространство от имена, което най-накрая разкрива проблема. Трябва да посочите пространство от имена като част от извличането на XML , което е по-просто с подхода XMLTable; в този случай можете просто да го третирате като пространство от имена по подразбиране:

select itc.element_name, x.user_classification3
from i_transaction itc
cross join xmltable(
  xmlnamespaces(default 'http://xmlns.oracle.com/apps/otm'),
    '/TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW'
  passing xmltype(itc.xml_blob)
  columns user_classification3 varchar2(10) path 'USER_CLASSIFICATION3'
) x
where itc.i_transaction_no = 31553115
and rownum = 1;

ELEMENT_NA USER_CLASS
---------- ----------
dummy      ZXF       

или с XMLQuery:

select itc.element_name, xmlquery(
  'declare default element namespace "http://xmlns.oracle.com/apps/otm"; (: :)
    /TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW/USER_CLASSIFICATION3/text()'
  passing xmltype(itc.xml_blob)
  returning content
) x
from i_transaction itc
where itc.i_transaction_no = 31553115
and rownum = 1;

ELEMENT_NA X                                                                               
---------- --------------------------------------------------------------------------------
dummy      ZXF                                                                             

Ако искате да продължите да използвате остарелия extractvalue() можете да предоставите пространството от имена като аргумент и на това, отново както е показано в документацията :

select itc.element_name,
  extractvalue(xmltype(xml_blob),
    '/TenderOffer/Shipment/RATE_OFFERING/RATE_OFFERING_ROW/USER_CLASSIFICATION3/text()',
    'xmlns="http://xmlns.oracle.com/apps/otm"')
from i_transaction itc where itc.i_transaction_no = 31553115 and rownum = 1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имате нужда от помощ, за да преместите 8k стойност на колона от R в колона CLOB (Oracle)

  2. Как да намерите таблица, където статистиката е заключена

  3. Уникално ограничение без индекс

  4. Oracle има ли концепция за филтриран индекс?

  5. Използване на оператор case в ограничение за проверка