Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Триггер на удаление   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
4-1075355181
Lefan
2004-01-29 08:46
2004.04.18
как получить список служб и их состояние?


3-1080029292
VIB
2004-03-23 11:08
2004.04.18
DBGrid


7-1076701323
Khabibulin
2004-02-13 22:42
2004.04.18
Volume


3-1079447433
Andriy Tysh
2004-03-16 17:30
2004.04.18
Group in DBGrid (DBGridEh)


14-1080131354
dr Tr0jan
2004-03-24 15:29
2004.04.18
Опять про хостинг, но уже с MySQL