powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает триггер
12 сообщений из 12, страница 1 из 1
Не срабатывает триггер
    #39436022
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Имеется две таблицы: таблица-справочник районов Rajons с сокращенными названиями short_name и полными названиями full_name, и таблица состояний водителей VDL, в которую пишется район Location.
Программа пишет в VDL.Location то короткое название района, то полное. Причины такого поведения уходят глубоко в прошлое. Сама программа обрабатывает и длинные и короткие имена районов, но встала задача в базе хранить только длинные имена. Программу на данный момент доработать нельзя.
Я написал триггер
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR ALTER trigger VDL_BU1 for VDL
active before update position 1
AS
declare variable full_name varchar(30);
begin
  select first 1 full_name from Rajons where full_name like '('||RTrim(new.LOCATION)||')%'
  into :full_name;
  if (FULL_NAME is not null)
    then new.LOCATION=:FULL_NAME;
end


По моей задумке, если новое значение Location короткое, то нужно найти полное название из таблицы районов (а полные названия начинаются все с короткого в скобках, например Ц = (Ц)ентр, 2 = (2)-Сады-2 )

И вот загвоздка в том, что при вводе короткого названия вручную или даже после запроса
Код: sql
1.
update VDL set Location=Location


все отрабатывает и переименовывается в длинное название. А из программы почему-то насильно вписываются короткие названия.
Почему триггер может не срабатывать?
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436023
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slandПочему триггер может не срабатывать?
Триггер не может не срабатывать. Вопрос в том какую хрень в таблицу пишет программа, что
select ничего не возвращает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436032
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, это уже немного радует. А то я уже начинал беспокоиться, что триггер читает данные, которые неподтверждены или вообще не может прочитать данные. В общем, уже не знаю что и думать.
Но какую бы хрень программа не ложила, после запроса
Код: sql
1.
update VDL set Location=Location

те же самые значения переименовываются в длинные. Вопрос в том, что может мешать триггеру сразу при вставке короткого названия прописать длинное?
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436035
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sland,

если вставка это insert то не удивительно
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436041
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, нет - не вставка. в VDL текущее состояние водителей, в программе поле Location обновляется для заданного водителя.
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436045
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал select поменять на такой
Код: sql
1.
select first 1 full_name from Rajons where short_name=new.LOCATION


- не помогает.

Например, есть short_name='А' и full_name='(А)лмазный'. Программа пишет в Location 'А', а триггер его не меняет на длинное название.
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436052
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задлянафига эвристика, если можно просто выбирать "длинное имя по короткому".
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436056
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slandнет - не вставка. в VDL текущее состояние водителей, в программе поле Location обновляется
для заданного водителя.

Трассировку включал? Уверен, что эта программа не делает delete+insert?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436065
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
да, уверен: delete+insert нет. ID записей не меняются. Имеется ввиду трассировка триггера? Так он по шагам отрабатывает и все. А если другая трассировка - то как включить/использовать?
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436066
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slandА если другая трассировка - то как включить/использовать?
fbtracemgr или аналогичная тулза в свежих версиях эксперта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39436086
sland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за оперативную помощь.
Кажется вот это все-таки работает:
Код: sql
1.
select first 1 full_name from Rajons where short_name=new.LOCATION


Почему не работало по-началу - загадка.
...
Рейтинг: 0 / 0
Не срабатывает триггер
    #39440099
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sland
Код: sql
1.
2.
CREATE OR ALTER trigger VDL_BU1 for VDL
active before update position 1

Почему триггер может не срабатывать?

Код: sql
1.
ACTIVE BEFORE INSERT OR UPDATE 
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает триггер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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