Автор Тема: Тригерры  (Прочитано 6143 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Тригерры
« : 08 Мая 2009, 03:37:20 »
Nosta вопрос к тебе, сделал триггер который реагирует на удаление (добавление) скриншотов
SET TERM ^ ;



CREATE OR ALTER TRIGGER IMAGES_USER_MARK_SCREENSHOTS FOR IMAGES
ACTIVE AFTER INSERT OR DELETE POSITION 0
AS
DECLARE VARIABLE CMF_ID INTEGER;
DECLARE VARIABLE VALUE_TEXT VARCHAR(127);
BEGIN
CMF_ID = '1';
VALUE_TEXT = 'Нет Скриншота';

IF (DELETING) THEN
IF (NOT (EXISTS( SELECT 1 FROM  CUSTOM_VALUES_SHORTSTR WHERE "cmfid"=:CMF_ID AND "mid"=OLD."mid" AND "value"=:VALUE_TEXT))) THEN
IF (NOT (EXISTS( SELECT 1 FROM  IMAGES WHERE "mid"=OLD."mid"))) THEN
INSERT INTO CUSTOM_VALUES_SHORTSTR ("cmfid", "mid", "value")
  VALUES (:CMF_ID, OLD."mid", :VALUE_TEXT);


IF (INSERTING) THEN
DELETE FROM
  CUSTOM_VALUES_SHORTSTR
WHERE
  ("cmfid" = :CMF_ID) AND ("value" = :VALUE_TEXT) AND ("mid" = NEW."mid");
END
^


SET TERM ; ^

работает на 100%, но есть одно НО, он коректно работает если все манипуляции проводить через менеджер базы (IB Expert или любой другой), если добавляем скрин в PVD, удаление значения "Нет Скриншотов" не происходит, и наоборот при удалении скрина это значение не добавляется, но если мы добавляем и удаляем через IB Expert то все проходит на ура, триггер срабатывает. Посмотри у себя, может где-то не до конца завершаются транзакции или не происходит commit.
« Последнее редактирование: 08 Мая 2009, 05:05:48 от moran »
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Тригерры
« Ответ #1 : 09 Мая 2009, 02:25:51 »
При применении изменений у меня 100% комит стоит. Да и всё равно если комит должен тригер рано или поздно вызываться, IMHO.
Как найду время проверю.
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации