ОШИБКА: синтаксическая ошибка при или около / modify(‘заменить значение | PostgresSQL

#sql #postgresql

#sql #postgresql

Вопрос:

Я пытаюсь написать запрос для обновления значения столбца xml, которое может иметь или не иметь существующее значение. Я пробовал этот запрос, но он выдает синтаксическую ошибку, не знаю почему. Я не эксперт по SQL, я просто работаю с существующим кодом.

Ошибка

 ERROR:  syntax error at or near "("
LINE 4: SET user_prop.modify('replace value of ("//PREF/NOTIFICATION...
                            ^
SQL state: 42601
Character: 199
 

Запрос

 UPDATE user
SET user_prop.modify('replace value of ("//PREF/NOTIFICATIONS/@ASK_YOUR_INSTR") with ("TRUE")') where username='1038125@';
 

Значение XML

 <PROP>
<ACL DENY="CREATECOURES"></ACL>
<PREF>
    <NOTIFICATIONS ASK_YOUR_INSTR="FALSE" />
</PREF>
</PROP>
 

Ответ №1:

ЗАДАННОЙ части ОБНОВЛЕНИЯ требуется присвоение, например

 update foo
  set bar = bar   1
where id = 1;
 

Вы не сказали нам, что делает ваша функция modify() , но если она возвращает измененное значение XML, то, я думаю, вы ищете:

 UPDATE user
  SET the_column = user_prop.modify('....')
where username='1038125@';
 

Комментарии:

1. Что ж, я исправил эту ошибку. И предполагается, что функция modify() изменяет значение узла xml

2. @M.WaseemUllahKhan не показывая нам, что modify() делает ваша функция, на это невозможно ответить.

3. Я нашел эту функцию в Интернете и подумал, что она может работать, но, похоже, у Postgres нет способа обновить значение.

Ответ №2:

Я думаю, это ответ

 UPDATE HR_XML
SET Salaries.modify('replace value of 
(/Salaries/Marketing/Employee[@ID=("2")]/Salary/text())[1] with ("60000")')
 

можете ли вы попытаться удалить кавычки из //PREF/NOTIFICATIONS/@ASK_YOUR_INSTR

Комментарии:

1. Это недопустимый SQL