Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггеры и каскадное удаление / 12 сообщений из 12, страница 1 из 1
20.06.2017, 18:02
    #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
20.06.2017, 20:37
    #39475073
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры и каскадное удаление
alekcvp,

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

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

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

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

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

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


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