powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / проблема с триггеров
14 сообщений из 14, страница 1 из 1
проблема с триггеров
    #38931167
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер
Не могу разобраться с триггеров, при выполнении условий должна проходить вставка в зависимую таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR ALTER trigger dochead_ai_promo for dochead
active before insert position 0
as
declare variable V_TEK_USER integer;
declare variable V_GROUP integer;
begin
  select ID
  from CUR_USER
  into :V_TEK_USER;
  select ID_GROUP
  from USERS
  where ID_USER = :V_TEK_USER
  into :V_GROUP;
  if (V_GROUP = 25 and
      new.DOCTYPE = 1281) then
    insert into DOCHEAD_SMREF_ADD
    values (new.id_dochead, 828, 27,null,null,null);
end


Все проверил,условия точно выполняются, пробовал для проверки делать вставку в другую таблицу - проблем нет. Что с этой не нравится - не понимаю.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931194
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> before insert
хороший тон вставлять данные в дургие таблицы в афтер триггере.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931203
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставь в триггер вот это и запусти трейс с включенной log_context:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE OR ALTER trigger dochead_ai_promo for dochead
active before insert position 0
as
declare variable V_TEK_USER integer;
declare variable V_GROUP integer;
begin
  select ID
  from CUR_USER
  into :V_TEK_USER;
  select ID_GROUP
  from USERS
  where ID_USER = :V_TEK_USER
  into :V_GROUP;

  rdb$set_context( 'USER_TRANSACTION', 'V_TEK_USER=' || coalesce(V_TEK_USER, 'NULL!') );
  rdb$set_context( 'USER_TRANSACTION', 'V_GROUP=' || coalesce(V_GROUP, 'NULL!') );


  if (V_GROUP = 25 and
      new.DOCTYPE = 1281) then
    insert into DOCHEAD_SMREF_ADD
    values (new.id_dochead, 828, 27,null,null,null);
end


Запусти приложение и смотри в лог трейса. Подозреваю, что там NULL(ы).
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931206
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky> before insert
хороший тон вставлять данные в дургие таблицы в афтер триггере.
почему?
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931210
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

ну как. в before insert вставка же еще пока не случилась. А ты уже чего-то распихиваешь по другим таблицам. Мало-ли, вдруг ошибка при вставке произойдет, и серверу придется больше действий отменять.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931216
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,ну да. Сорри,в Иркутске уже 4 часа ночи,засыпаю на ходу...
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931218
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

can't format message 13:829 -- message system code -4.
function RDB$SET_CONTEXT could not be matched.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931225
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

сделал вот так:
create or alter trigger DOCHEAD_AI_PROMO for DOCHEAD
active before insert position 0
as
declare variable V_TEK_USER integer;
declare variable V_GROUP integer;
begin
/* Trigger text */
select ID
from CUR_USER
into :V_TEK_USER;
select ID_GROUP
from USERS
where ID_USER = :V_TEK_USER
into :V_GROUP;
udf_trace(:V_TEK_USER, 'c:\trig.txt');
udf_trace(:V_GROUP, 'c:\trig.txt');


if (V_GROUP = 25 and
new.DOCTYPE = 1281) then
/* EXCEPTION ZM_CREATE; */
insert into DOCHEAD_SMREF_ADD
values (17142456, 828, 27, null, null, null);
end

данные эти есть,условие выполняется
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931230
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarпробовал для проверки делать вставку в другую таблицу - проблем нет. Что с этой не нравится - не понимаю.У этой тоже триггеры небось...
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931234
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, неа, ни одного
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931263
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

ну так сделай. На after insert и на after delete.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931280
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переделал триггер,теперь :
CREATE OR ALTER trigger dochead_ai_promo for dochead
active after insert position 0
as
declare variable V_TEK_USER integer;
declare variable V_GROUP integer;
begin
/* Trigger text */
select ID
from CUR_USER
into :V_TEK_USER;
select ID_GROUP
from USERS
where ID_USER = :V_TEK_USER
into :V_GROUP;
udf_trace(:V_TEK_USER, 'c:\trig.txt');
udf_trace(:V_GROUP, 'c:\trig.txt');
udf_trace(new.id_dochead, 'c:\trig.txt');


if (V_GROUP = 25 and
new.DOCTYPE = 1281) then
/* EXCEPTION ZM_CREATE; */
insert into DOCHEAD_SMREF_ADD
values (new.id_dochead, 828, 27, null, null, null);
end

но всё равно не срабатывает.
...
Рейтинг: 0 / 0
проблема с триггеров
    #38931345
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarcan't format message 13:829 -- message system code -4.
function RDB$SET_CONTEXT could not be matched.я ждал этого ответа :-)
Поменять в "'V_TEK_USER=' || coalesce(V_TEK_USER, 'NULL!')" сцепление строк ('||') на запятую - оно, конечно, было сложно...
...
Рейтинг: 0 / 0
проблема с триггеров
    #38932258
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидоно, конечно, было сложно...
Паша,не ерничай,я на момент создания топика не спал сутки,мне проще было свою udf использовать для трассировки,чем в твоем коде ошибку ловать.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / проблема с триггеров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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