powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа триггеров
3 сообщений из 3, страница 1 из 1
Работа триггеров
    #32585819
BigallS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица PEOPLE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE PEOPLE (
    ID_P      INTEGER NOT NULL,
    ID_EXTP   INTEGER,
    ...
    CATEGORY  VARCHAR( 30 ),
    N_PRIV    INTEGER,
    ...
);

ALTER TABLE PEOPLE ADD CONSTRAINT UNQ_NPRIV UNIQUE (N_PRIV);

Есть 2 триггера:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TRIGGER PEOPLE_BI0 FOR PEOPLE
ACTIVE BEFORE INSERT POSITION  0 
AS
begin
  if (New.category is not NULL) then
   /*если новое значение "категория" есть, выбираем макс.значение
  "Льготн. очереди" добавляем 1 и записываем*/ 
  UPDATE PEOPLE SET new.n_priv = (select max(N_PRIV) from PEOPLE)+ 1 ;
   /* Trigger text */ 
end

CREATE TRIGGER PEOPLE_BU0 FOR PEOPLE
ACTIVE BEFORE UPDATE POSITION  0 
AS
begin
  if (new.category is null) then
   /*если поле "категория" пустое, поле льг.очереди делаем пустым*/ 
  update people set New.n_priv = NULL;
   /* Trigger text */ 
end

Проблема в том что при вставке записи происходит ошибка
следующего вида:
Too many concurrent executions of the same request
(Слишком много сходящихся выполнения того же самого запроса).

Если сделать триггер при UPDATE неактивным все работает
нормально. Почему срабатывает триггер UPDATE?

Датасет FibPlus5.2 + Сервер Firebird 1.5
...
Рейтинг: 0 / 0
Работа триггеров
    #32585830
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что ты всё это зациклил в вечный цикл. Тебе надо писать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TRIGGER PEOPLE_BI0 FOR PEOPLE
ACTIVE BEFORE INSERT POSITION  0 
AS
begin
if (New.category is not NULL) then
 /*если новое значение "категория" есть, выбираем макс.значение
"Льготн. очереди" добавляем 1 и записываем*/ 
    select max(N_PRIV)+ 1  from PEOPLE into new.n_priv;
 /* Trigger text */ 
end
...
Рейтинг: 0 / 0
Работа триггеров
    #32585846
BigallS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А понятно, как я накололся. Спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа триггеров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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