Нужно заменить значение в SYS.XMLTYPE в Oracle

Я пытаюсь заменить строку в оракуле типа данных SYS.XMLTYPE, я попытался использовать ниже запрос, но похоже, что это может использоваться только для dataType VARCHAR2.

update RECORD_TABLE set MB_RECORDS=replace(MB_RECORDS, '<currency>', '') where MB_RECORD_ID ='23667';
</currency>

Как мы можем это сделать, когда тип данных для MB_RECORDS - SYS.XMLTYPE?

Как ни странно, это работает для оператора select в том же столбце.

select replace(MB_RECORDS, '<currency>', '') from RECORD_TABLE where MB_RECORD_ID ='23667';
</currency>
1 ответ

в выражении select подразумевается неявное преобразование в VARCHAR2, а также возвращает VARCHAR2.

в заявлении на обновление ваша замена возвращает VARCHAR2, как и в SELECT, но ваш ожидаемый тип - XMLTYPE

Decalre
REF_DOC XMLTYPE;
Begin
 REF_DOC := SYS.XMLTYPE.CREATEXML(InputString);
-- and then insert or update
End;

Зачем вам нужно заменять

<tag> with ?
</tag>

Дело в том, что существуют функции манипулирования XMLTYPE в ORACLE, но вы заменяете масло маслом, поэтому я не уверен, что они поймут, что вы пытаетесь сделать.

Вот документ о том, как работать с XMLTYPE, ищите пример 4-32.

licensed under cc by-sa 3.0 with attribution.