Я хотел бы заменить значение узла в XML.XML хранится в базе данных Oracle 12.2, в столбце XMLTYPE.Мой XML:
<Warehouse>
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
</Warehouse>
Функция UPDATEXML выполняет свою работу, но она медленная.
select
UPDATEXML(myxmlcolumn, '/Warehouse/Building/text()','mynewvalue')
from mytable;
Oracle говорит, что UPDATEXML устарел , и XMLQUERY должно бытьиспользуется вместоИтак, я попробовал XMLQUERY вместо этого:
select
XMLQUERY(
'copy $t := $x modify(
replace value of node $t/Warehouse/Building with "mynewvalue"
) return $t'
from mytable;
Он работает намного быстрее , но есть одна маленькая проблема: если запрошенный узел не существует, он завершится неудачно с XVM-01155:[XUDY0027] Недопустимое целевое выражение
Например, этот выбор завершается неудачно с вышеуказанной ошибкой (обратите внимание на псевдоним узла ZZZ):
select
XMLQUERY(
'copy $t := $x modify(
replace value of node $t/Warehouse/ZZZ with "mynewvalue"
) return $t'
from mytable;
Вопрос: Как можноИзменить код, чтобы игнорировать несуществующие узлы?