Главная страница
    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.46 MB
Время: 0.034 c
4-1076413001
Bestden
2004-02-10 14:36
2004.04.18
Не компилится AdJustTokenPrivileges ...


3-1079611948
CTAC
2004-03-18 15:12
2004.04.18
Конвертация типов полей


1-1080889651
still_swamp
2004-04-02 11:07
2004.04.18
Что нужно для работы приложений D8?


14-1079911715
saNat
2004-03-22 02:28
2004.04.18
Перегрев HDD


1-1080891457
EthernalWonderer
2004-04-02 11:37
2004.04.18
анимированный gif





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский