powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update or insert в триггере вызывает PRIMARY KEY VIOLATION
3 сообщений из 3, страница 1 из 1
update or insert в триггере вызывает PRIMARY KEY VIOLATION
    #39837282
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже 2 дня бьюсь, не могу победить. Конечно, можно обойти другим способом это сделать, но хотелось бы разобраться.
Итак, есть условно 2 таблицы - одна - журнал движения товара, вторая - журнал остатков. При добавлении записи в журнал движения триггер меняет таблицу остатков.
Ошибка возникает на следующем операторе в триггере AFTER INSERT. Первичный ключ по полям ACAID, AART, AUID, ADATE

Код: sql
1.
2.
3.
    update or insert into AMOUNTS (ACAID, AART, AUID, ADATE, ACNT, ISLAST)
    values (new.OPCAIDFROM, new.OPART, new.OPUID, new.OPDATE, :CCNT - new.OPCOUNT, 1)
    matching (ACAID,AART,AUID,ADATE);


с последней строкой (матчинг или нет), бьет нарушение PRIMARY KEY VIOLATION, вставку отрабатывает нормально, а вот обновление - ошибка. Первичный ключ верен, все поля верны, уже для надежности вручную MATCHING прописал - все равно ошибка.

Тот же оператор, запущенный сам по себе
Код: sql
1.
2.
3.
    update or insert into AMOUNTS (ACAID, AART, AUID, ADATE, ACNT, ISLAST)
    values (:OPCAIDFROM, :OPART, :OPUID, :OPDATE, :CCNT - :OPCOUNT, 1)
    matching (ACAID,AART,AUID,ADATE)


с теми же параметрами все хорошо модифицирует.
Уже подозреваю на особое поведение триггера AFTER INSERT или невыявленный глюк
...
Рейтинг: 0 / 0
update or insert в триггере вызывает PRIMARY KEY VIOLATION
    #39837283
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, тут что-то еще интереснее, буду разбираться дальше, вроде как триггер ни при чем, хотя ошибку из него бьет
...
Рейтинг: 0 / 0
update or insert в триггере вызывает PRIMARY KEY VIOLATION
    #39837284
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам создал, сам и решил, видно, полезно отвлекаться. Проблема оказалась в том, что первичный ключ содержит дату как DATE, я же передавал значение поля , имеющего тип TIMESTAMP. Полагая, что оператор вставки при сохранении значения сам преобразует TIMESTAMP в DATE, выбивало ошибку. Явно приведя тип TIMESTAMP к DATE - все стало нормально работать. Какой-то глючок ФБ походу. Вот что решило проблему, хотя должно само было преобразовать.

Код: sql
1.
2.
3.
    update or insert into AMOUNTS (ACAID, AART, AUID, ADATE, ACNT, ISLAST)
    values (new.OPCAIDFROM, new.OPART, new.OPUID, cast(new.OPDATE as DATE), :CCNT - new.OPCOUNT, 1)
    matching (ACAID,AART,AUID,ADATE);
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update or insert в триггере вызывает PRIMARY KEY VIOLATION
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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