Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.035 c
3-1080193730
WodneRu
2004-03-25 08:48
2004.04.18
Русские символы в FB


14-1079792350
Style
2004-03-20 17:19
2004.04.18
XML. Может кто объяснить почему так?


4-1076138220
Амир
2004-02-07 10:17
2004.04.18
Запуск внешней проги


3-1078829501
Rauf
2004-03-09 13:51
2004.04.18
Проблема Юникода в запросе SQL


1-1080935930
Rosik
2004-04-02 23:58
2004.04.18
Про WebBrowser. Помогите плиз.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский