powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отменить триггером update конкретной строки таблицы Firebird 2.5
25 сообщений из 37, страница 1 из 2
Отменить триггером update конкретной строки таблицы Firebird 2.5
    #40053697
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, с триггерами почти не работал, просьба сильно не пинать.
Суть задачи такая - в клиенте (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
Отменить триггером update конкретной строки таблицы Firebird 2.5
    #40053701
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.03.2021 16:24, арт2010 пишет:
> ну в общем как грубо говоря отменить триггером обновление всех неподходящих строк, у которых
> id_tabledoc удовлетворяет условию, но другой gtin
> и обновить только одну строку с нужным gtin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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