![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
nikolja1990 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.10.2010 Репутация: нет Всего: нет |
Всем доброго времени суток.
Ситуация: имеется база данных и в ней есть 2 связанные таблицы: первая - учебные заведения, вторая площади этим учебным заведениям принадлежащие. Я написал триггер который после каждой вставки (как только с ним разберусь, напишу еще на изменение и удаление) в таблицу площадь должен считать сумму всех площадей принадлежащих данному учебному заведению и обновлять данное значение в таблицы учебных заведений, получилось вот так: CREATE OR REPLACE TRIGGER sumArea AFTER INSERT ON Area FOR EACH ROW DECLARE totalAreaTemp DECIMAL(3, 2); BEGIN SELECT SUM(SizeArea) INTO totalAreaTemp FROM Area WHERE Area.InstitutionId = :NEW.INSTITUTIONID; UPDATE Institution SET TotalArea = totalAreaTemp WHERE Institution.INSTITUTIONID = :NEW.INSTITUTIONID; END; / в дримкодере триггер создается и показывает что ошибок не содержит. если я пытаюсь тот же тригер создать подключившись к базе через NetBeans (через него создавал все таблички - без проблем) получаю следующее: Executed successfully in 0.018 s, 0 rows affected. Line 1, column 1 Error code 6550, SQL state 65000: ORA-06550: line 2, column 99: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; Line 6, column 1 Error code 1008, SQL state 72000: ORA-01008: not all variables bound Line 8, column 5 Error code 900, SQL state 42000: ORA-00900: invalid SQL statement Line 9, column 1 Execution finished after 0.018 s, 3 error(s) occurred. В общем создал триггер через дримкодер. При попытке вставить данные в таблицу Area и в дримкодере и в нетбинсе выскакивает такое сообщение: Error code 4091, SQL state 42000: ORA-04091: table NIKOLJA.AREA is mutating, trigger/function may not see it ORA-06512: at "NIKOLJA.SUMAREA", line 4 ORA-04088: error during execution of trigger 'NIKOLJA.SUMAREA' insert! объясните нубу - что я делаю не так? Заранее спасибо. Добавлено через 6 минут и 17 секунд ах да! совсем забыл! используется oracle 10g XE, dreamCoder for Oracle Enterprise Freeware Edition 6.0 Build(6.0.2.0), NetBeans 7.1.1 Присоединённый файл ( Кол-во скачиваний: 0 ) ![]() |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Запрещено читать набор данных в тот момент, когда он изменяется (мутирует), т.к. не представляется возможным вернуть согласованный результат. В частности нельзя из row триггера читать данные из той таблицы, для которой этот триггер определен.
Очень надеюсь, что от Institution к Area прокинут fk по INSTITUTIONID. Без него такой триггер может начудить. Еще могут случиться взаимные блокировки, если один пользователь захватит Institution и встанет на блокировке Area которая захвачена другим пользователем, который, в то же время, пытается захваттить Institution, который уже захватил первый пользователь. Избежать взаимных блокировок можно вызывав select for update nowait перед апдейтом. Добавлено @ 16:03 Вообще, обычно, аггрегаты считают при модификации только в тех случаях, когда посчитать их при выборке оказывается проблематичным. Мне кажется у вас далеко не тот случай. Это сообщение отредактировал(а) Zloxa - 20.3.2012, 08:45 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
nikolja1990 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.10.2010 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "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. |