обновление таблиц XML в Oracle (сценарий использования - маскирование конфиденциальных данных после обновления) - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь обновить столбец 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: exist (/ row / c178 [@ m = 83])) так как я использовал его для некоторых других таблиц, но когда мы добавили это второе условие, все испортилось -> $ t / row / c178 [@ m = 82] = "США"

1 Ответ

0 голосов
/ 01 марта 2019

обновление USER.TABLE t1

set t1.xmlrecord =

XMLQuery ('

copy $ t: =. Modify (

если fn: существующие / row / c2, затем замените значение узла $ t / row / c2 на concat («имя», $ 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 (),

if ((fn: существует (/ row / c4)) и ($ t / row / c178 [@ m = 82] = "США ")) затем замените значение узла $ t / row / c4 на (" Манхэттен ") else (),

if ((fn: существует (/ row / c5)) и ($ t / row/ c178 [@ m = 82] = "США")) затем замените значение узла $ t / row / c5 на concat ("NY 10036, USA.", $ t / row / @ id) else ()

)

return $ t

'

передача t1.xmlrecord

возвращение содержимого

);

...