powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггеры и каскадное удаление
12 сообщений из 12, страница 1 из 1
Триггеры и каскадное удаление
    #39475002
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток.

Суть проблемы: Есть две таблицы, в одной id и названия объектов, в другой некоторые динамические параметры этих объектов. У второй есть внешний ключ:
Код: sql
1.
ALTER TABLE PARAMS ADD CONSTRAINT FK_PO_LINK FOREIGN KEY (OBJECT_ID) REFERENCES OBJECTS (OBJECT_ID) ON DELETE CASCADE ON UPDATE CASCADE;



Вопрос: можно ли сделать для PARAMS триггер BEFORE UPDATE так, чтобы защитить запись по условию, например, WHERE TYPE_ID = 0,
т.е. чтобы удалить её можно было только при удалении записи с этим OBJECT_ID в родительской таблице?

Пробовал что-то вроде
Код: sql
1.
2.
if ((old.type_od = 0) and exists(select 1 from objects where object_id = :old.object_id)) then 
  exception forbidden;

но, походу, на момент каскадного удаления запись в родительской таблице еще существует.
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475073
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Попробуй перенеси проверку из триггера Before* в триггер After*. Для отката изменений нет никакой разницы, где будет сгенерировано исключение.
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475104
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,
Код: sql
1.
REVOKE DELETE ON PARAMS FROM <список_пользователей/ролей>
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475108
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
Другие-то параметры можно удалять, надо только пару заблокировать.
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475110
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика на триггерах - путь в ад
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475113
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvprdb_dev,
Другие-то параметры можно удалять, надо только пару заблокировать.И чем этот параметр, который нельзя удалять, отличается от других параметров?
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475153
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЛогика на триггерах - путь в ад
90 триггеров на таблице - это мне уже котел готовят? :)
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475175
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarhvladЛогика на триггерах - путь в ад
90 триггеров на таблице - это мне уже котел готовят? :)

Похоже ты пытаешься догнать известную здесь "базу Болтика" :)
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475179
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksGallemarпропущено...

90 триггеров на таблице - это мне уже котел готовят? :)

Похоже ты пытаешься догнать известную здесь "базу Болтика" :)

Куда мне до Евгения и Павла :)
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475215
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarhvladЛогика на триггерах - путь в ад
90 триггеров на таблице - это мне уже котел готовят? :)

А ты уже там сидишь. Просто не замечаешь - привык. :)
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475229
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devalekcvprdb_dev,
Другие-то параметры можно удалять, надо только пару заблокировать.И чем этот параметр, который нельзя удалять, отличается от других параметров?
Это дефолтный параметр, который есть у всех объектов, определенного типа, всегда.
...
Рейтинг: 0 / 0
Триггеры и каскадное удаление
    #39475232
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДalekcvp,
Попробуй перенеси проверку из триггера Before* в триггер After*. Для отката изменений нет никакой разницы, где будет сгенерировано исключение.
Спасибо, помогло.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггеры и каскадное удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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