![]() |
|
Модераторы: LSD |
![]()
|
|
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Вчера ходил на собеседование и получил такой вопрос:
Нужно создать триггер который бы изменял всю таблицу, ну или по определенному условию, когда меняется один элемент в таблице. Я ответил что не знаю как такое реализовать ибо каждый вызов триггера будет вызывать еще один триггер, результат бесконечный вызов триггеров друг другом. На что мне сказали что есть особый тип триггеров которые меняют все строки в таблице за один заход. Ну это прелюдия. Собственно вопрос что за триггеры такие, я погуглил но ничего такого не нашел.Может просто не правильно искал pl/sql trigger for all row in table Ну вот собственно и все, может кто то кинет в меня ссылкой или расскажет? -------------------- Never again... |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
ни какой он не особый, а обыкновенный оракловый триггер, только не на изменение строки. в оракле тригеры делятся на стайтметн(операторный) триггеры и роу(строковой) триггеры. стайтмент тригге срабатывает на весь update вцелом т.е. один раз либо перед либо после update, а роу триггеры работают не посредственно при изменении каждой строки таблицы. ну так вот, на роу триггере ты не можешь делать изменения данной таблицы т.к. таблица на этот момент мутированна(но есть и исключения из правил читай здесь, что не понятно будет спрашивай: http://www.firststeps.ru/sql/oracle/ шиги 111, 112. Это сообщение отредактировал(а) DimW - 17.1.2008, 11:07 |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
DimW, Блин грустно то как, вам + за помощь
-------------------- Never again... |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
хочу поправить себя самого, здесь имелись ввиду триггеры которые обьявленны как автономные, тоесть которые выполняются в не текущей транзакции, поэтому в таком триггере можно обращаться к этой же таблице, но всегда есть шанс в место ошибки о мутации получить дэд лок. Nuzur, в твоем случае дэд лок гарантирован, поэтому работадатели имели ввиду стейтмент триггер. я бы сказал полезно иногда получить пинок на собеседовании. сам когда по ним ходил года два назад, очень растраивался после очереднова отказа, но теперь понимаю что именно на собеседовании обращали мое внимание на такие вещи на которые я бы сам может обратил внимание через год. так что чем раньше попинают тем лучше |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |