Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает триггер / 12 сообщений из 12, страница 1 из 1
10.04.2017, 16:49
    #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
10.04.2017, 16:54
    #39436023
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает триггер
slandПочему триггер может не срабатывать?
Триггер не может не срабатывать. Вопрос в том какую хрень в таблицу пишет программа, что
select ничего не возвращает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.04.2017, 17:04
    #39436032
sland
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает триггер
Ага, это уже немного радует. А то я уже начинал беспокоиться, что триггер читает данные, которые неподтверждены или вообще не может прочитать данные. В общем, уже не знаю что и думать.
Но какую бы хрень программа не ложила, после запроса
Код: sql
1.
update VDL set Location=Location

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

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


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

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

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


Почему не работало по-началу - загадка.
...
Рейтинг: 0 / 0
18.04.2017, 11:41
    #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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не срабатывает триггер / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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