Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизТриггер на удаление Найти похожие ветки
← →
YurikGl © (2004-03-21 16:03) [0]Если кому не лень, пожалуйта copy/paste-те мне триггер запрещающий удаление записи в метеринской таблице, если есть связанные в дочерней. А то в книжке только каскадное удаление приведено, а порывшись в ya с ходу тоже ничего не нашел. :(
Заранее спасибо.
З.Ы. Осваиваю interbase.
← →
YurikGl © (2004-03-21 16:06) [1]sorry, "материнской таблице" :(
← →
Desdechado © (2004-03-21 16:40) [2]если есть связанные в дочерней, значит, есть FOREIGN KEY
а поэтому, при попытке удаления IB сам ругнется, без триггеров, правда не очень понятными нерусскими словамиCREATE TRIGGER TR_PLACES_BD0 FOR PLACES
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE pl_no INTEGER;
BEGIN
SELECT Count(*) FROM Streets
WHERE place_id = old.place_id
INTO :pl_no;
IF( pl_no > 0 ) THEN
EXCEPTION ex_DELPLACE;
END
по-русски можно так
← →
Sergey Masloff (2004-03-21 17:14) [3]Или так:
CREATE TRIGGER TR_PLACES_BD0 FOR PLACES
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE TMP INTEGER;
BEGIN
FOR SELECT NULL FROM Streets into :TMP
WHERE place_id = old.place_id
DO
EXCEPTION ex_DELPLACE;
END
Только жаль что нельзя "неименованый" курсор объявить (без INTO) - можно бы без переменной обойтись было. Тут выгода в чем - нам же неважно одна или 100000 дочерних записей. Главно есть или нет - и "мой" вариант может оказаться чуть быстрее
← →
Desdechado © (2004-03-21 17:43) [4]если уж без переменной, то
IF( EXISTS( SELECT ... ) ) THEN
EXCEPTION ...
кстати, тоже проверяет не все записи
← →
Sergey Masloff (2004-03-21 18:03) [5]Desdechado © (21.03.04 17:43) [4]
это самый лучший вариант.
← →
YurikGl © (2004-03-21 19:13) [6]re [4] А почему не все? И насколько это "не все"?
← →
Domkrat © (2004-03-21 19:28) [7]>если есть связанные в дочерней, значит, есть FOREIGN KEY
>а поэтому, при попытке удаления IB сам ругнется, без триггеров, >правда не очень понятными нерусскими словами
1. IBExpert->FOREIGN KEY (сразу получишь и триггер)
2. onDeleteError
И будет ругаться на русском.
← →
Zacho © (2004-03-21 20:44) [8]
> YurikGl © (21.03.04 19:13) [6]
> re [4] А почему не все?
А зачем все ? Достаточно, что бы хотя бы одна возвращалась запросом.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c