Триггеры в InterBase 6.5
Добавлено: 25 дек 2005, 07:32
Хочу добиться следующего: при возможных коллизиях при в ставке записи, когда в таблицу пытаются вставить запись с уже существующим ключом OrderIndex, должно выдаваться сообщение о невозможности вставки. Для чего написал соответствующее исключение:
CREATE EXCEPTION CANNOT_INSERT 'Cannot insert record: dataset was updated. reload the database.';
И триггер:
Триггер не срабатывает и позволяет вставлять хоть сколько записей с одинаковым ключом. Что характерно, если вместо SameNumber > 0 поставить ">=0" - все работает как ожидается и не дает вставить ни одной записи. Тот же эффект - если из BEFORE INSERT сделать AFTER INSERT. А как надо - не работает. В чем проблема, может кто знает?
CREATE EXCEPTION CANNOT_INSERT 'Cannot insert record: dataset was updated. reload the database.';
И триггер:
Код: Выделить всё
CREATE TRIGGER ORDER_INS_TEST FOR ORDERS
BEFORE INSERT POSITION 0 AS
DECLARE VARIABLE SameNumber INTEGER;
BEGIN
SELECT COUNT(*) FROM ORDERS
WHERE ORDERS.ORDERINDEX = NEW.ORDERINDEX
INTO :SameNumber;
IF (SameNumber > 0) THEN
EXCEPTION CANNOT_INSERT;
END !!