Главная страница
    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.043 c
14-1080220067
VID
2004-03-25 16:07
2004.04.18
Нужен сервер с реальным IP


1-1080768475
LORDMAXX
2004-04-01 01:27
2004.04.18
Кол-во строк и столбцов и цвет ячеек EXCEL


3-1079685693
Max1
2004-03-19 11:41
2004.04.18
Обновление базы через Интернет


4-1076427450
Morg
2004-02-10 18:37
2004.04.18
два exe файла в одном


7-1076929862
Kremen
2004-02-16 14:11
2004.04.18
Расмер диска





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