Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Триггер на все строки таблицы, вопрос с собеседования 
V
    Опции темы
Nuzur
Дата 17.1.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Вчера ходил на собеседование и получил такой вопрос:

Нужно создать триггер который бы изменял всю таблицу, ну или по определенному условию, когда меняется один элемент в таблице.
Я ответил что не знаю как такое реализовать ибо каждый вызов триггера будет вызывать еще один триггер, результат бесконечный вызов триггеров друг другом.
На что мне сказали что есть особый тип триггеров которые меняют все строки в таблице за один заход.
Ну это прелюдия.

Собственно вопрос что за триггеры такие, я погуглил но ничего такого не нашел.Может просто не правильно искал pl/sql trigger for all row in table
Ну вот собственно и все, может кто то кинет в меня ссылкой или расскажет?


--------------------
Never again...
PM MAIL   Вверх
DimW
Дата 17.1.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(Nuzur @  17.1.2008,  10:39 Найти цитируемый пост)
На что мне сказали что есть особый тип триггеров которые меняют все строки в таблице за один заход.


ни какой он не особый, а обыкновенный оракловый триггер, только не на изменение строки.
в оракле тригеры делятся на стайтметн(операторный) триггеры и роу(строковой) триггеры.
стайтмент тригге срабатывает на весь update вцелом т.е. один раз либо перед либо после update, а роу триггеры работают не посредственно при изменении каждой строки таблицы. ну так вот, на роу триггере ты не можешь делать изменения данной таблицы т.к. таблица на этот момент мутированна(но есть и исключения из правил  smile, возможно на собеседовании это и имелось ввиду ), а на стайтмент триггере пожалуйста изменяй всю таблицу(а может имелось ввиду это).

читай здесь, что не понятно будет спрашивай: http://www.firststeps.ru/sql/oracle/  шиги 111, 112.


Это сообщение отредактировал(а) DimW - 17.1.2008, 11:07
PM MAIL ICQ   Вверх
Nuzur
Дата 17.1.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



DimW, Блин грустно то как, вам + за помощь


--------------------
Never again...
PM MAIL   Вверх
DimW
Дата 17.1.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(DimW @  17.1.2008,  10:56 Найти цитируемый пост)
(но есть и исключения из правил  , возможно на собеседовании это и имелось ввиду ),

хочу поправить себя самого, здесь имелись ввиду триггеры которые обьявленны как автономные, тоесть которые выполняются в не текущей транзакции, поэтому в таком триггере можно обращаться к этой же таблице, но всегда есть шанс в место ошибки о мутации получить дэд лок. Nuzur, в твоем случае дэд лок гарантирован, поэтому работадатели имели ввиду стейтмент триггер.

Цитата(Nuzur @  17.1.2008,  11:43 Найти цитируемый пост)
Блин грустно то как

я бы сказал полезно иногда получить пинок на собеседовании. сам когда по ним ходил года два назад, очень растраивался после очереднова отказа, но теперь понимаю что именно на собеседовании обращали мое внимание на такие вещи на которые я бы сам может обратил внимание через год. так что чем раньше попинают тем лучше smile 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.