![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Я тут занялся созданием авто инкрементируемого ключа, а поскольку в оракле самое простое - это сделать его через триггер, то возник вопрос, можно ли этот триггер натравить сразу на несколько табличек?
Вот код, который я подсмотрел по созданию авто инкремента:
Хотелось бы в строке "create trigger auto_inc_tasks before insert on running_tasks" перечислить все таблички, на которые я хочу повесить триггер, а не только running_tasks -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Royan, в тригерах не силен. Беглый осмотр документации показал, что тригер вешается только на одно событие (поэтому на одну таблицу).
Есть предложение использовать N тригеров (по каждому на таблицу) которые используют один сквенс (auto_inc_seq). Тогда ID-шники всех таблиц будут уникальны (если ты этого хочешь). |
|||
|
||||
Deniel_li |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
А можите сказать, как происходит добавление данных в таблицы? С помощью процедур или просто инсертом?
|
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
ivashkanet, Да, ты прав, я в нескольких источниках наткнулся на тоже самое.
Deniel_li, Можно и так и так, все это довольно просто находится в гугле по запросу вроде "oracle create triggers" Это сообщение отредактировал(а) Royan - 26.12.2007, 21:20 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
По мне так самое простое - это проставить умолчальное значение поля в sys_guid() ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
LSD, ИМХО, гуид жрет много ресурсов + по нему индекс тяжелее строиться
Хотя это действительно проще некуда. Это сообщение отредактировал(а) ivashkanet - 27.12.2007, 09:44 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Мне нравится GUID тем что:
- он уникален по всем таблицам и базам - если данные надо передавать в другую БД, то с ним не будет проблем, он может аналогично генерироваться в другой СУБД (в отличии от сиквенсов и автоинкрементов) -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Royan |
|
||||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Выяснял, что это не совсем так. С помощью инструкций INSERTING, UPDATING, DELETING можно создать триггер, который бы реагировал на действия связанные со всеми этими операциями Пример:
Триггер дернется при всех INSERT'ах, UPDATE'ах и DELETE'ах, выполненных на таблице orders -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||
|
|||||
Deniel_li |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 6.12.2007 Репутация: нет Всего: 1 |
Если вынести инсерты в таблицы процедуры, то можно вообще отказаться от тригеров, а создать функцию вроде такой (сорри за возможные ошибки, проверить сейчас негде)
и использовать эту функцию в процедурах (можно и в инсертах) для генерации следующего ид. Помоему это проще всего. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Royan, прикольно
![]() Только вот таблица все равно остается только одна, а наличее такого рода ифов в тригере мне, мягко говоря, не нравиться. Уж лучше три тригера иметь на каждый тип изменения. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
behelit_ru |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Тут на помощь могут прийти понятия "структурное программирование", "модульность".
Нужно написать функцию, которая выбирает значение из последовательности и возвращает его... а потом для таблиц написать одинаковые триггеры, которые вызывают эту функцию (в случае чего нужно будет править только одну функцию, а не кучу триггеров). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |