| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Натравить триггер на несколько таблиц |
| Автор: Royan 26.12.2007, 17:56 | ||
| Я тут занялся созданием авто инкрементируемого ключа, а поскольку в оракле самое простое - это сделать его через триггер, то возник вопрос, можно ли этот триггер натравить сразу на несколько табличек? Вот код, который я подсмотрел по созданию авто инкремента:
Хотелось бы в строке "create trigger auto_inc_tasks before insert on running_tasks" перечислить все таблички, на которые я хочу повесить триггер, а не только running_tasks |
| Автор: ivashkanet 26.12.2007, 18:21 |
| Royan, в тригерах не силен. Беглый осмотр документации показал, что тригер вешается только на одно событие (поэтому на одну таблицу). Есть предложение использовать N тригеров (по каждому на таблицу) которые используют один сквенс (auto_inc_seq). Тогда ID-шники всех таблиц будут уникальны (если ты этого хочешь). |
| Автор: Deniel_li 26.12.2007, 18:49 |
| А можите сказать, как происходит добавление данных в таблицы? С помощью процедур или просто инсертом? |
| Автор: Royan 26.12.2007, 21:19 |
| ivashkanet, Да, ты прав, я в нескольких источниках наткнулся на тоже самое. Deniel_li, Можно и так и так, все это довольно просто находится в гугле по запросу вроде "oracle create triggers" |
| Автор: LSD 27.12.2007, 00:15 |
По мне так самое простое - это проставить умолчальное значение поля в sys_guid() |
| Автор: ivashkanet 27.12.2007, 09:44 |
| LSD, ИМХО, гуид жрет много ресурсов + по нему индекс тяжелее строиться Хотя это действительно проще некуда. |
| Автор: LSD 27.12.2007, 11:40 |
| Мне нравится GUID тем что: - он уникален по всем таблицам и базам - если данные надо передавать в другую БД, то с ним не будет проблем, он может аналогично генерироваться в другой СУБД (в отличии от сиквенсов и автоинкрементов) |
| Автор: Deniel_li 27.12.2007, 14:01 | ||
Если вынести инсерты в таблицы процедуры, то можно вообще отказаться от тригеров, а создать функцию вроде такой (сорри за возможные ошибки, проверить сейчас негде)
и использовать эту функцию в процедурах (можно и в инсертах) для генерации следующего ид. Помоему это проще всего. |
| Автор: ivashkanet 27.12.2007, 14:46 |
| Royan, прикольно Только вот таблица все равно остается только одна, а наличее такого рода ифов в тригере мне, мягко говоря, не нравиться. Уж лучше три тригера иметь на каждый тип изменения. |
| Автор: DimW 27.12.2007, 15:10 |
а иногда лучше иметь 3 триггера на один тип изменения все зависит от конкретной задачи. |
| Автор: behelit_ru 12.2.2008, 23:47 |
| Тут на помощь могут прийти понятия "структурное программирование", "модульность". Нужно написать функцию, которая выбирает значение из последовательности и возвращает его... а потом для таблиц написать одинаковые триггеры, которые вызывают эту функцию (в случае чего нужно будет править только одну функцию, а не кучу триггеров). |