Обновление таблиц XML в Oracle (сценарий использования - маскирование конфиденциальных данных после обновления)
Я пытаюсь обновить столбец XML в Oracle и получать ошибки, которые я не могу решить. нужна помощь здесь
если данные там существуют и если их "США", то только обновите значение или ничего не делайте
update USER.TABLE t1
set t1.xmlrecord=
XMLQuery('
copy $t := . modify (
if(fn:exists(/row/c2)) then replace value of node $t/row/c2 with concat("firstname",$t/row/@id) else(),
if(fn:exists(/row/c3)) then replace value of node $t/row/c3 with concat("lastname",$t/row/@id) else(),
if (fn:exists(/row/c178[@m=83])) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c178[@m=83] with ("NEW YORK") else(),
if(fn:exists(/row/c4)) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c4 with ("Manhattan") else(),
if(fn:exists(/row/c5)) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c5 with concat(" NY 10036, USA.",$t/row/@id) else()
)
return $t
'
passing t1.xmlrecord
returning content
);
ORA-19114: XPST0003 - error during parsing the XQuery expression:
LPX-00801: XQuery syntax error at 'and'
5 if
(fn:exists(/row/c178[@m=83])) and $t/row/c178[@m=82]="USA" then replace
- ^
ORA-06512: at line 6
я не получаю эти 2 условия правильно (fn: существует (/row/c178[@m=83])) и $t/row/c178[@m=82]="США"
это единственное условие работает нормально -> (fn: существующие (/row/c178[@m=83])), так как я использовал его для некоторых других таблиц, но когда мы добавили это второе условие, все испортилось -> $t/ строка / C178 [@ т = 82] = "США"
1 ответ
Обновить USER.TABLE t1
set t1.xmlrecord =
XMLQuery ("
скопировать $t:= . изменить (
если fn: существует /row/c2, тогда замените значение узла $t/row/c2 на concat ("firstname", $ t / row / @ id) else (),
если fn: существующие /row/c3, то заменить значение узла $t/row/c3 на concat ("фамилия", $ t / row / @ id) else (),
если ((fn: существует (/row/c178[@m=83])) и ($t/row/c178[@m=82]="США")), то замените значение узла $t/row/c178[@m=83] с ("NEY YORK") else(),
если ((fn: существует (/row/c4)) и ($t/row/c178[@m=82]="США")), то замените значение узла $t/row/c4 на ("Манхэттен") еще (),
если ((fn: существует (/row/c5)) и ($t/row/c178[@m=82]="США")), то замените значение узла $t/row/c5 на concat("NY 10036, США. ",$ T / row / @ id) else ()
)
вернуть $ t
'
прохождение t1.xmlrecord
возврат контента
);