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

Oracle UpdateXML() zmienia strukturę XML?

Myślę, że możesz uniknąć problemu, zastępując pusty tekst wartością tymczasową, aktualizując cały pozostały tekst, a następnie zastępując wartość tymczasową wartością null.

Nie rozumiem XPath, prawdopodobnie jest na to znacznie lepszy sposób, ale wydaje się, że to działa:

SELECT
    --#3: Replace the temporary value with null, this keeps the start and end tag
    UpdateXML(
        --#2: Replace everything but the temporary value
        UpdateXML(
            --#1: Replace empty text with a temporary value
            UpdateXML(xmlData, '/TEST/VALUE[not(text())]', '<VALUE>TEMPORARY VALUE</VALUE>')
        ,'/TEST/VALUE[text()!="TEMPORARY VALUE"]/text()', 'hello')
    ,'/TEST/VALUE[text()="TEMPORARY VALUE"]/text()', null) examle
FROM (SELECT XMLType('<TEST><VALUE>hi</VALUE><VALUE>hola</VALUE><VALUE></VALUE></TEST>') as xmlData FROM DUAL);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę testować jednocześnie pod kątem wartości null i not null w sql?

  2. Importowanie danych z pliku csv

  3. Parsowanie JSON przy użyciu Oracle SQL — JSON_TABLE

  4. Oracle na alpejskim linuksie

  5. dystrybucja płatności sql