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

Oracle-XMLTYPE :Как да актуализирате стойност

Въпреки че отговорът на @Анатолий Предеин определено е правилен за 10g и 11g, трябва да знаете, че updatexml е остарял в Oracle 12c.

От 12cR1 препоръчителният начин за манипулиране на XML е XQuery Update Facility. Не е специфично за Oracle, но препоръка на W3C също така имплементира много други XML инструменти.

По-долу ще намерите пълен пример. Въпреки това не навлизам в подробности за XQuery, а вместо това ви насочвам към следната документация:

  • Актуализация на XQuery за нетърпеливите
  • Замяна на XML възли от Ръководство за разработчици на Oracle XML DB

Примерна настройка

create table so61_t(
 id number
,xml xmltype
);

insert into so61_t values(1, '<?xml version="1.0" encoding="WINDOWS-1252"?>
<View>
    <ReportValues>
        <SalaryValue variable="HR" value="999"/>
        <SalaryValue variable="floor" value="20"/>
    </ReportValues>
</View>');

insert into so61_t values(2, '<?xml version="1.0" encoding="WINDOWS-1252"?>
<View>
    <ReportValues>
        <SalaryValue variable="HR" value="998"/>
        <SalaryValue variable="floor" value="19"/>
    </ReportValues>
</View>');

Промяна на XML

update so61_t set xml =
xmlquery(
'copy $t := $x modify(
  (for $i in $t/View/ReportValues/SalaryValue[@variable="HR"]/@value
   return replace value of node $i with ''666'')
 ,(for $i in $t/View/ReportValues/SalaryValue[@variable="floor"]/@value
   return replace value of node $i with ''SALES'')
) return $t'
passing xml as "x" returning content
)
where id = 1
;

Резултати

SQL> col id for 99
SQL> col xml for a78
SQL> select id, xmlserialize(content xml as varchar2(200)) as xml from so61_t;
 ID XML
--- -------------------------------------------------
  1 <?xml version="1.0" encoding="UTF-8"?>
    <View>
      <ReportValues>
        <SalaryValue variable="HR" value="666"/>
        <SalaryValue variable="floor" value="SALES"/>
      </ReportValues>
    </View>
  2 <?xml version="1.0" encoding="UTF-8"?>
    <View>
      <ReportValues>
        <SalaryValue variable="HR" value="998"/>
        <SalaryValue variable="floor" value="19"/>
      </ReportValues>
    </View>

SQL>


  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 в SQL Server

  2. GROUP BY с MAX(DATE)

  3. Какво е ограничението на размера за аргумент на подпрограма varchar2 PL/SQL в Oracle?

  4. Мигриране на база данни на Oracle от AWS EC2 към AWS RDS, част 3

  5. Начало на Oracle само за четене