Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Update использование новых значений  [new]
Riss
Member

Откуда:
Сообщений: 186
Добрый день Господа.

По руководству Update


Разрешено использовать имена столбцов в выражениях справа. При этом использоваться
будет всегда старое значение столбца, даже если присваивание этому столбцу уже произошло
ранее в перечислении SET.

Примечание
Так было не всегда. До версии 2.5, столбцы сразу получали новые значения. Это являлось
нестандартным поведением, и поэтому было изменено в версии 2.5.
Однако, для восстановления совместимости со старыми версиями в firebird.conf
существует параметр OldSetClauseSemantics, который, будучи установленным в 1,
восстанавливает старое поведение. Этот параметр в будущем будет удален.


Раз это нестандартное поведение, то думаю скорее всего есть какая то альтернатива - как использовать новые значения? Не проводить же Update несколько раз?
Или, если нельзя, то как Вы обходите этот момент?
Просветите, пожалуйста.

Заранее благодарен советам.
8 апр 19, 12:39    [21855761]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Riss,

во первых это примечание касается вот таких случаев

UPDATE T
SET A = A + 1, B = A + 3
WHERE ...


Однако есть ещё штука касающаяся стабильности курсора, но это начиная с 3.0.
Но множественный апдейт в рамках курсора одной и той же записи это само по себе криво.

Можешь привести пример, когда прям никак не получается переделать свой запрос?
8 апр 19, 13:02    [21855799]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Симонов Денис
Можешь привести пример, когда прям никак не получается переделать свой запрос?

Ставлю на то, что у него "set a=(ахренительный подзапрос), b=a+(второй ахренительный
подзапрос)".

Posted via ActualForum NNTP Server 1.5

8 апр 19, 13:10    [21855811]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Dimitry Sibiryakov,

выкинуть и переписать на merge
8 апр 19, 13:22    [21855823]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Riss
Member

Откуда:
Сообщений: 186
Раз "нестандартное поведение", то это понятно, что криво, но этот случай меня и интересует... Не важно - насколько "ахренительный подзапрос". Создаю n таблиц и к ним m полей и там вложенности расчетов. До 2.5 работает безотказно.
Я рассуждаю, что раз этот метод крив, то должен быть нормальный метод. В чем он?
8 апр 19, 13:23    [21855829]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Riss
В чем он?

Вторая нормальная форма. Запрет на поля, являющиеся функцией других полей.

Posted via ActualForum NNTP Server 1.5

8 апр 19, 13:29    [21855840]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Riss,

я не понимаю что ты хочешь услышать. Как абстрактно решается абстрактная задача?
Не у одного тебя существуют сложные расчёты, и все как-то их делают в рамках правил работы с сервером.
Если мне нужен супер сложный апдейт на основе запроса с джойнами, то я использую MERGE, либо UPDATE по курсору
8 апр 19, 13:30    [21855846]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Riss
там вложенности расчетов

Выноси расчёт в before-триггера.

Posted via ActualForum NNTP Server 1.5

8 апр 19, 13:30    [21855847]     Ответить | Цитировать Сообщить модератору
 Re: Update использование новых значений  [new]
Riss
Member

Откуда:
Сообщений: 186
Спасибо большое за советы господа)))
Есть информация к размышлению ... Опробую варианты ))
8 апр 19, 13:35    [21855860]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить