Personal Video Database

Русский => Разработчикам => Скрипты, Плагины, Шаблоны и Шкурки => Тема начата: moran от 08 Мая 2009, 03:37:20

Название: Тригерры
Отправлено: moran от 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.
Название: Re: Тригерры
Отправлено: nostra от 09 Мая 2009, 02:25:51
При применении изменений у меня 100% комит стоит. Да и всё равно если комит должен тригер рано или поздно вызываться, IMHO.
Как найду время проверю.