|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
Всем добрый вечер. Возник вопрос: возможно ли в SP Firebird как-нибудь реализовать такую конструкцию без if? Код: sql 1. 2. 3. 4.
Т.е. чтобы значение type обновлялось только если новое значение не null, иначе оставалось старое. Или лучше сделать триггер на обновление? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 21:33 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
alekcvp> иначе оставалось старое "иначе оставалось старое" означает field = field. Ну и if null - соответственно type = coalesce(:type, type) alekcvp> Или лучше сделать триггер на обновление? Лучше озвучить задачу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 22:03 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
alekcvp...возможно ли в SP Firebird как-нибудь реализовать такую конструкцию без if? ... Ну и зачем? If как раз и сделан для употребления оного в SP|EB. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 22:14 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамЛучше озвучить задачу. Задача простая: есть SP, у которой три параметра - id, type и value. Она вызывается из разных мест приложения, и в некоторых из них ничего не известно о type, поэтому хочется иметь возможность вызвать эту процедуру как SPName(:ID, NULL, :VALUE), а не писать отдельный запрос. Вариант с if и двумя (почти) одинаковыми строчками вызывает зуд у моего внутреннего перфекциониста :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 22:28 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамсоответственно type = coalesce(:type, type) Спасибо, это решение мне нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 22:34 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
На здоровье. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2017, 00:56 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
я бы ещё в where добавил where type IS DISTINCT FROM :type and value IS DISTINCT FROM :value просто для того, чтобы не копировать впустую строку, если там ничего не изменилось по факту ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2017, 15:03 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
Ariochпросто для того, чтобы не копировать впустую строку, если там ничего не изменилось по факту Изменение Value в приложении контролируется, а type - smallint, на проверку издержки больше будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2017, 18:42 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
alekcvp, какие нафиг издержки? строка в любом случае читается с диска и целиком распаковывается в буфере. после этого либо в ней меняются два поля, на диске создаётся новая строка, и изменённый буфер в неё записывается, а старая строка на диске помечается, как мусор сейчас это происходит в любом случае либо в моём варианте в некоторых случаях после распаковки строки будет два сравнения, и если они не показали разницы - то остальные шаги просто игнорируются overhead на сравнение двух значений по сравнению с чтением строки с диска и распаковкой - минимальный а экономия на отсутствии создания на диске новой строки - заметная ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2017, 10:52 |
|
Обновить поле если значение не NULL
|
|||
---|---|---|---|
#18+
Ariochoverhead на сравнение двух значений по сравнению с чтением строки с диска и распаковкой - минимальный а экономия на отсутствии создания на диске новой строки - заметная В общем случае - согласен, в моём конкретном: если Value не изменилось, то SP просто не будет вызвана, если изменилось, то не имеет значения, менялось Type или нет - всё равно надо писать ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 10:42 |
|
|
start [/forum/topic.php?fid=40&fpage=43&tid=1561494]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 148ms |
0 / 0 |