Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отменить триггером update конкретной строки таблицы Firebird 2.5 / 25 сообщений из 37, страница 1 из 2
15.03.2021, 16:24
    #40053697
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Господа, с триггерами почти не работал, просьба сильно не пинать.
Суть задачи такая - в клиенте (Delphi) запускаю sql запрос на обновление таблицы

Код: sql
1.
2.
3.
Update DataMatrixes set name_tovara = :pname, id_sprtovara = :pidsprtovara, id_sprproizv = ' +
        ' :pidsprproizv,  id_sprserii = :pidsprserii, kod1c = :pkod1c, ' +
        '  cena = :pcena, cenaopt = :pcenaopt where id_tabledoc = :pGTIN ');



Но в таком случае обновляются все записи в таблице с данным id_tabledoc
Мне же надо обновить единственное поле с конкретным значение gtin

Как мне сделать триггер на этой же таблице в базе чтобы было грубо говоря

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR ALTER trigger datamatrixes_bu0 for datamatrixes
active before update position 0
AS
begin
  if (new.gtin <> old.gtin) then 
    else 
      begin
        обновление только одной конкретной строки в таблице, у new.gtin = old.gtin
      end;
end



ну в общем как грубо говоря отменить триггером обновление всех неподходящих строк, у которых
id_tabledoc удовлетворяет условию, но другой gtin
и обновить только одну строку с нужным gtin
...
Рейтинг: 0 / 0
15.03.2021, 16:25
    #40053701
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 16:24, арт2010 пишет:
> ну в общем как грубо говоря отменить триггером обновление всех неподходящих строк, у которых
> id_tabledoc удовлетворяет условию, но другой gtin
> и обновить только одну строку с нужным gtin

ты чо творишь?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:26
    #40053702
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Мимопроходящий, решаю проблему. Возможно так вообще сделать? Или как-то по другому надо?
...
Рейтинг: 0 / 0
15.03.2021, 16:28
    #40053703
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 16:26, арт2010 пишет:
> Или как-то по другому надо?

нужно апдейтить только то, что нужно.
и не апдейтить то, что не нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:28
    #40053705
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010Или как-то по другому надо?

Добавить условие в запрос мешает что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:31
    #40053708
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Мимопроходящий, не поспоришь, но и так медленно работает. Если я еще буду выбирать для каждой строки открытого на клиенте дока доп. параметры для апдейта, это будет совсем медленно. Вот я и подумал что возможно как-то извернуться на триггерах
...
Рейтинг: 0 / 0
15.03.2021, 16:34
    #40053711
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Нет, тут програмист нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:35
    #40053712
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 16:31, арт2010 пишет:
> Мимопроходящий, не поспоришь, но и так медленно работает.
> Если я еще буду выбирать для каждой строки открытого на клиенте дока
> доп. параметры для апдейта, это будет совсем медленно.

индексы отсутствуют?

> Вот я и подумал что возможно как-то извернуться на триггерах

нельзя "откатить" выборочные записи.
можно перейти на MS SQL.
тм есть виртуальные таблицы с изменёнными данными.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:37
    #40053714
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Dimitry Sibiryakov, ага. очень смешно. Ты же не знаешь всех условий моей задачи и какая херова туча разных таблиц апдейтится при сохранении одного дока и какие условия на время этого апдейта. Вопрос был конкретно про триггеры. Ну, если нельзя их так использовать, значит нельзя
...
Рейтинг: 0 / 0
15.03.2021, 16:39
    #40053716
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 16:37, арт2010 пишет:
> Dimitry Sibiryakov, ага. очень смешно. Ты же не знаешь всех условий моей задачи и какая херова
> туча разных таблиц апдейтится при сохранении одного дока и какие условия на время этого апдейта.
> Вопрос был конкретно про триггеры. Ну, если нельзя их так использовать, значит нельзя

а не пользуешься ли ты всякими ORM-ами?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:42
    #40053718
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010Ты же не знаешь всех условий моей задачи и какая херова туча разных таблиц апдейтится при
сохранении одного дока и какие условия на время этого апдейта.

Зато я знаю http://www.ibase.ru/dataaccesspaths/ и прочие способы обнаружения и устранения
проблем с производительностью запросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 16:56
    #40053727
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
феерический бред.
...
Рейтинг: 0 / 0
15.03.2021, 17:06
    #40053731
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010,

разберись
а) с кавычками
б) с понятием поле и запись
...
Рейтинг: 0 / 0
15.03.2021, 17:15
    #40053737
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Тему можно давно уже закрывать, чтобы не ждать пока каждый мегамозг соизволит высказаться ) Жалко до сих пор не добавили такую полезнейшую фичу
...
Рейтинг: 0 / 0
15.03.2021, 17:18
    #40053740
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 17:15, арт2010 пишет:
> Жалко до сих пор не добавили такую полезнейшую фичу

какую такую?
я лично не до конца понял что конкретно ты хочешь получить
и почему нормальные методы решения тебе не подходят.

зы: а вообще похоже на вброс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 17:22
    #40053743
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Мимопроходящий, да ладно, проехали, спасибо, ты единственный кто хоть реально попытался меня понять, а не до..капаться до кавычек. Вроде я нормально сформулировал свою мысль изначально - как сделать грубо говоря выборочный update c постусловием, которое не задано изначально, но будет известно уже в процессе срабатывания триггера BeforeUpdate (new.gtin = old.gtin или нет). Ну раз это изврат и не комильфо и вообще не реально на firebird, ну и замечательно. Уже нашел гораздо более логичный и экономичный способ
...
Рейтинг: 0 / 0
15.03.2021, 17:27
    #40053744
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 17:22, арт2010 пишет:
> да ладно, проехали, спасибо, ты единственный кто хоть реально попытался меня понять,
> а не до..капаться до кавычек. Вроде я нормально сформулировал свою мысль изначально -
> как сделать грубо говоря выборочный update c постусловием, которое не задано изначально,
> но будет известно уже в процессе update (new.gtin = old.gtin или нет).

у тебя в запросе нет этих полей.
каким образом они должны быть задействованы?

> Ну раз это изврат и не комильфо и вообще не реально на firebird, но и замечательно.

реально многое.
но ты не сформулировал изначальную задачу ,
а вместо этого привёл своё виденье того, как задача могла бы быть решена, если бы...
так ты слона не продашь. ©

> Уже нашел гораздо более логичный и экономичный способ

расскажи.
интересно ж.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 17:36
    #40053747
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010
вообще не реально на firebird
Реально решить любую логичную задачу. Нет ДДЛ, нет постановки, есть только кусок кода сильно похожий на бред. Как понимать-то? У МП вот хрустальный шар хренацатого левела, но даже он тебя не понял.

арт2010
Тему можно давно уже закрывать
Это не проблема. :)
Но вдруг ты таки дельное что скажешь?
...
Рейтинг: 0 / 0
15.03.2021, 17:38
    #40053748
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Мимопроходящий, ну вот я говорю - я не шарю как работают триггеры, поэтому и спросил. Я думал хоть поля gtin и нет в запросе, но так как оно есть в самой таблице, то триггер может отследить new.gtin = old.gtin. По крайней мере в IbExpert при создании триггера old и new доступны для всех полей и gtin в том числе. А сделать решил просто - как и советовали все таки задавать более конкретное условие при update, чтобы не приходилось ничего отбрасывать. Правда есть свои нюансы, по которым все равно невозможно сделать четкое условие where gtin = :gtin, ну да ладно, это уже частности, которые не должны помешать
...
Рейтинг: 0 / 0
15.03.2021, 17:46
    #40053754
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 17:38, арт2010 пишет:
> Мимопроходящий, ну вот я говорю - я не шарю как работают триггеры, поэтому и спросил.
> Я думал хоть поля gtin и нет в запросе, но так как оно есть в самой таблице,
> то триггер может отследить new.gtin = old.gtin.

стоп! стоп!
если твой запрос это поле НЕ ЗАТРАГИВАЕТ, то с чего вдруг ему меняться?
т.е. отчего возникнет new.gtin <> old.gtin ?

> По крайней мере в IbExpert при создании триггера old и new доступны для всех полей и gtin в том числе.
> А сделать решил просто - как и советовали все таки задавать более конкретное условие при update,
> чтобы не приходилось ничего отбрасывать.
> Правда есть свои нюансы, по которым все равно невозможно сделать четкое условие where gtin = :gtin

почему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 17:50
    #40053758
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010,

Правильно ли я понял, что ты хочешь менять GTIN, но делать вид, будто не знаешь, меняешь ли его или нет, и проверять изменение в триггере?
По-моему, в табличном поле, у колонки GTIN надо поставить галочку "только для чтения".


Мимопроходящий
какую такую?
арт2010
чтобы не ждать пока каждый мегамозг соизволит высказаться
Нажимаешь на кнопку - и бац! Уже все высказались.
...
Рейтинг: 0 / 0
15.03.2021, 17:53
    #40053761
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
15.03.2021 17:50, WildSery пишет:
> По-моему, в табличном поле, у колонки GTIN надо поставить галочку "только для чтения".

твой шар мощнее моего
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.03.2021, 18:02
    #40053762
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010
...Ты же не знаешь всех условий моей задачи и какая херова туча разных таблиц апдейтится при сохранении одного дока и какие условия на время этого апдейта. Вопрос был конкретно про триггеры. Ну, если нельзя их так использовать, значит нельзя

То есть, ты не понимаешь, как работают триггеры, но при этом понимаешь все остальное?
...
Рейтинг: 0 / 0
15.03.2021, 18:28
    #40053769
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
Если число в никнейме означает год рождения, то это многое объясняет :)
...
Рейтинг: 0 / 0
15.03.2021, 18:29
    #40053770
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отменить триггером update конкретной строки таблицы Firebird 2.5
арт2010Я думал хоть поля gtin и нет в запросе, но так как оно есть в самой таблице, то триггер может отследить new.gtin = old.gtin.
если столбец gtin не меняется, так в триггере всегда будет new.gtin = old.gtin. А если оно задается в запросе, то его надо ставить в where.

Передать "параметр :pGTIN" в триггер никак нельзя, только в процедуру.
В параметр список значений тоже передать нельзя. Можно передать строкой в процедуру, а в процедуре эту строку распарсить на куски.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отменить триггером update конкретной строки таблицы Firebird 2.5 / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]