Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyodrębnianie wartości z xml clob za pomocą przestrzeni nazw przy użyciu Oracle pl/sql

Zaktualizowany kod XML ma przestrzeń nazw, która w końcu ujawnia problem. Musisz określić przestrzeń nazw jako część ekstrakcji XML , co jest prostsze dzięki podejściu XMLTable; w tym przypadku możesz po prostu potraktować to jako domyślną przestrzeń nazw:

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       

lub za pomocą 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                                                                             

Jeśli chcesz nadal używać przestarzałej extractvalue() funkcji możesz podać przestrzeń nazw jako argument do tego, ponownie jak pokazano w dokumentacja :

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. Funkcja RTIM() w Oracle

  2. Lekki dla Oracle

  3. Wyrocznia. Zaznacz wszystko, jeśli parametr ma wartość null, w przeciwnym razie zwróć konkretny problem z przedmiotem

  4. Utwórz użytkownika ze wszystkimi uprawnieniami w Oracle

  5. Jak zamienić nawiasy na łączniki w funkcji Oracle REGEXP_REPLACE?