powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер запрещающий удалять записи при
39 сообщений из 39, показаны все 2 страниц
Триггер запрещающий удалять записи при
    #38818338
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как это выполнить? задание такое:
Разработать триггер запрещающий удалять записи, если с ней связаны записи из другой таблицы.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818353
JleHuH213Разработать триггер запрещающий удалять записи, если с ней связаны записи из другой таблицы.Это не триггером делается. Более того, вам не удастся реализовать это триггерами, т.к. они видят только изменения внутри транзакций, в которых работают, и не видят "грязных" изменений, которые делают транзакции-конкуренты.
Читайте доку на тему "Ограничения ссылочной целостности", они же - "внешние ключи".
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818360
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ованес Сусанян,

ты не понимаешь. Им именно так задание сформулировали.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818362
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JleHuH213,
ALTER TABLE .. ADD CONSTRAINT .. FOREIGN KEY (..) REFERENCES .. (..)
и триггер писать не надо
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818374
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисИм именно так задание сформулировали.
Ну, может это проверка на вшивость. Те, кто принесут триггер, зачёта не получат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818416
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу, может это проверка на вшивость. Те, кто принесут триггер, зачёта не получат.Думаю, это проверка на то, дочитал ли конкретный гражданин до главы, где описывается работа с экс...
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818419
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСимонов ДенисИм именно так задание сформулировали.
Ну, может это проверка на вшивость. Те, кто принесут триггер, зачёта не получат.


Тут бы ещё глубину связи понять, с другой таблицей, а то мало-ли что подразумевалось автором...
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818427
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что не будем давать пулемет?

если таки не боишься выстрелить себе в ногу, то читать про генерацию exception
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818579
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужен именно триггер.
Я как понимаю: перед удаление записей из подчиненной таблице срабатывает триггер. Который проверяет наличия записи в главной таблице совпадения. если находит то даёт команду что удалять не надо. Если так то: берем что то вроде
Код: sql
1.
 if((SELECT NAME FROM RATING) = old.st_surname) then

и надо дать команду что само удаление не делалось. как это сделать?
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818591
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JleHuH213как это сделать?
под спойлером в сообщении выше
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818595
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JleHuH213перед удаление записей из подчиненной таблице срабатывает триггер. Который проверяет наличия записи в главной таблице совпадения. если находит то даёт команду что удалять не надо.
это только у меня такое искривленное ощущение реальности
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818615
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m,

ты бы не умничал, а помог. Больше дела сделаешь.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818618
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JleHuH213> ты бы не умничал, а помог. Больше дела сделаешь.
Ты бы не тупил, а читал, что тебе умные люди пишут...

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818641
JleHuH213триггер <...> проверяет наличия записи в главной таблице совпадения. если находит то даёт команду что удалять не надо.Хорошо.

Вот у вас есть таблицы, которые вы хотите триггером "связать" так, чтобы они работали как главная и дочерняя:
Код: plaintext
1.
2.
3.
recreate table tmain(id int primary key);
recreate table tdetl(id int primary key, pid int); -- поле pid должно содержать всегда только какой-то ID из tmain
commit;

Вот я добавляю туда несколько строк:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
insert into tmain(id) values(1);
insert into tmain(id) values(2);
commit;

insert into tdetl(id, pid) values(100, 1);
insert into tdetl(id, pid) values(101, 1);
insert into tdetl(id, pid) values(102, 1);
insert into tdetl(id, pid) values(103, 1);
insert into tdetl(id, pid) values(201, 2);
insert into tdetl(id, pid) values(202, 2);
insert into tdetl(id, pid) values(203, 2);
commit;

Представим, что вы сделали триггер, логику которого обрисовали выше.
Объясните теперь: как УДАЛИТЬ из дочерней таблицы (tdetl) только одну строку из трёх для pid = 2 ?
Простое
Код: sql
1.
delete from tdetl where pid = 2 rows 1

- не прокатит, триггер запретит.
Значит, надо сначала удалить запись в главной таблице (tmain) - так по вашей логике ?
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818654
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Ованес Сусанян!
You wrote on 27 ноября 2014 г. 17:34:52:

Ованес Сусанян> так по вашей логике ? нет там логики.
это очередной тупой ленивый студиоз желает чтоб за него сделали лабу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818669
Мимопроходящийнет там логики.Да там и препода нет. Старший лаборант семинар проводит.
Учить триггерами обеспечивать декларативные правила - "за это убивать надо" (С)
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818677
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JleHuH213а помогТебе итак уже помогли, сделать больше означает "сделать вместо тебя". Озвучивай сумму компенсации и вперед в раздел "работа" с этим не к нам.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818690
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 2 таблица
Главная

Второстепенная


при попытке удаления "Иван" или "Сергей" НЕ удаляется.. при удалении "альберта" или "дениса" действие выполняется.

Так наглядние
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818691
JleHuH213при попытке удаления "Иван" или "Сергей" НЕ удаляется..В какой именно таблице запрещать удаление: в первой или во второй ? Судя по вашим словам, во "второстепенной" - так или нет ?
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818694
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ованес Сусанян,

Да.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818703
JleHuH213при удалении "альберта" или "дениса" действие выполняется.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 user #1 
-- Проверяем, что в гланой таблице нет записи "денис".
-- Допустим, что проверка прошла успешно, можно удалять.
delete from "второстепенная" where name = "денис";

 user  #2  // действует в то же самое время, что и user1
insert into "главная" (name) values("денис");

 user #1 
-- тут можно еще 100 раз обпроверяться, что записи "денис" в главное таблице нет.
-- И её действительно нет.  Пока  нет.
commit;

 user  #2  
commit;

Ну, и ? Удалили "дениса" из второстепенной, а он внезапно так оказался в главной...

Желаю удачи.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818775
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ованес Сусанян,

Подскажите, как сделать что бы по всем строкам выемки проверял? тут если результат выемки возвращает более 1 строки:
Код: sql
1.
if((SELECT name FROM t1) = old.name)
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818779
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я сделал спасибо! =)
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818789
JleHuH213Подскажите, как сделать что бы по всем строкам выемки проверял? тут если результат выемки возвращает более 1 строки:
Код: sql
1.
if((SELECT name FROM t1) = old.name)

1) я вас не понимаю. Вы делаете много грамматический ошибок, но что хуже - не заканчиваете предложения.
На всякий случай: http://www.sql.ru/forum/rules.aspx Ограничения
Официальный язык форума - русский. <...> Использование других языков возможно при цитировании либо в других исключительных случаях. Если он для вас не родной, сообщите об этом сразу, чтобы не было претензий от тех, кто пытается вас понять;
2) повторю еще раз: вы не решите исходную задачу триггерами. Так и передайте своему преподу. Пример я привёл выше .
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818792
JleHuH213я сделал спасибо! =)Благородный дон покажет этот шедевр серым обывателям ?
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818796
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ованес Сусанян,

у меня получилось так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR ALTER TRIGGER Trigger FOR T2
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
    if((SELECT name FROM t1 where name = old.name) = old.name) then
    exception ERROR_DEL;
end


в исключения добавил ERROR_DEL
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818800
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и прошу прощения что я безграмотный!)
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818804
JleHuH213
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR ALTER TRIGGER Trigger FOR T2
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  /* Trigger text */
 -- нельзя так делать! там же две и более строки может быть!
 -- ::: WRONG :::: >>> if((SELECT name FROM t1 where name = old.name) = old.name) then
    if ( exists(select * from t1 x where x.name = old.name) ) then
      exception ERROR_DEL;
end

Впрочем, это всё равно не прокатит при подключении второго юзера-"озорника".

JleHuH213в исключения добавил ERROR_DELДа бестолку это всё. Неужели ваш препод дал именно ТАКОЕ задание ?
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818817
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ованес Сусанян,

...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818818
JleHuH213
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ованес Сусанян,

Да что то я не подумал что записи тоже могут повторяться=( Спасибо за помощь
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818826
JleHuH213Да что то я не подумал что записи тоже могут повторятьсяОга. А ещё они (записи) могут одновременно обрабатываться двумя и более пользователями. И тогда ваш триггер отправится на помойку.
Но об этом вам будут рассказывать в следующем семестре
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818831
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ованес СусанянНо об этом вам будут рассказывать в следующем семестре
Скорее всего - не будут. Но это всё равно между ним и преподом. Сделал и сделал, оставь
его в покое.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818881
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ованес СусанянНо об этом вам будут рассказывать в следующем семестреПаша, ты неисправимый оптимист. :)
Наше дело предупредить, да, там обрыв, но коль скоро автору надо именно туда, то ему туда можно.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818890
Ivan_Pisarevskyно коль скоро автору надо именно туда, то ему туда можно.Да автор, кажись, вообще мало что понял. У него пропёрло - "ура! с глаз долой, из сердца вон!"
А вот преподу этому хотелось бы вопрос задать: чему он учит-то ?..
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818909
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyОванес СусанянНо об этом вам будут рассказывать в следующем семестреПаша, ты неисправимый оптимист. :)
Наше дело предупредить, да, там обрыв, но коль скоро автору надо именно туда, то ему туда можно.

При этом я знаю как минимум одно приложение в котором использовалась триггерная логика для ключей автоматически сгенерированная из UML диаграммы, которое работало у партнёров одного из "филиалов" ГПБ занимавшегося ипотекой, всего навсего 6 лет назад :)
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818914
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81> ГПБ занимавшегося ипотекой, всего навсего 6 лет назад :)

От ситуации зависит, может у них там нет конкурентных обновлений и пр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38818931
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNikolayV81> ГПБ занимавшегося ипотекой, всего навсего 6 лет назад :)

От ситуации зависит, может у них там нет конкурентных обновлений и пр.


Да нет, были фантомные записи, насколько помню, я не застал этап проектирования, думаю что исторически так вышло. Там до кучм был первый диалект, итог большая печаль с копейками.
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38819273
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81,

я слышал, что в IB5 были какие-то проблеммы с FK, а потом уже перерабатывать базу не стали
...
Рейтинг: 0 / 0
Триггер запрещающий удалять записи при
    #38819471
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochNikolayV81,

я слышал, что в IB5 были какие-то проблеммы с FK, а потом уже перерабатывать базу не стали

проблемы были с производительностью на left join, но и они решались
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггер запрещающий удалять записи при
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]