Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
olegar4
0 / 0 / 1
Регистрация: 07.06.2013
Сообщений: 28
1

Создание триггера для БД Кинотеатр

30.09.2014, 23:39. Просмотров 778. Ответов 5
Метки нет (Все метки)

Суть проблемы в следующем: допусти есть 3 таблицы BILET(ID_BILETA, MESTO, ID_SEANSA, B_CENA), SEANSI(ID_SEANSA, KOFFICIENT) и CENA(ID_CENA, ID_SEANSA, SKIDKA, CENA). Они связаны следующим способом: CENA-> SEANSI->BILET. При заполнении таблицы мне нужно добиться, чтобы поле B_CENA таблицы BILET заполнялось автоматически. Я создал триггер:
SQL
1
2
3
4
5
6
7
8
CREATE OR REPLACE TRIGGER "AUTOCENA"
BEFORE
INSERT OR UPDATE ON "BILET"
FOR each ROW
BEGIN
UPDATE BILET SET B_CENA =
  (SELECT SUM(CENA.CENA*SEANSI.KOFFICIENT) FROM CENA, SEANSI);
END;​
Но при попытке заполнить данные в таблицу BILET Oracle выдает ошибку:
error ORA-04091: table BILET is mutating, trigger/function may not see it ORA-06512: at "AUTOCENA", line 2 ORA-04088: error during execution of trigger 'AUTOCENA'.
В чем проблема? И какие еще способы есть для автозаполнения поля?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2014, 23:39
Ответы с готовыми решениями:

Создание триггера
Здравствуйте, имеется приложение на .net, в котором в при регистрации...

Создание триггера
Триггер создается почему-то с ошибками компиляции. Решил совсем упростить...

Создание триггера
Есть триггер: CREATE OR REPLACE TRIGGER TRG_AIUD_CONTRACT AFTER INSERT OR...

Схема БД бронирования мест в кинотеатр
Всем привет! Создал схему БД бронирования мест в кинотеатр для RESTful...

Создание триггера для аудита
Добрый вечер столкнулся с такой проблемой, у меня есть около 40 таблиц в БД, и...

5
Gepar
1182 / 538 / 77
Регистрация: 01.07.2009
Сообщений: 3,517
01.10.2014, 00:27 2
Первая же ссылка в гугле ведёт на дельную статью (в целом все стать и на dba-oracle дельные)
http://www.dba-oracle.com/t_avoiding_mutating_table_error.htm
0
olegar4
0 / 0 / 1
Регистрация: 07.06.2013
Сообщений: 28
01.10.2014, 00:41  [ТС] 3
ммммм, как много английских иероглифов, ЛОРН ИНГЛИСХ НЕ ДЛЯ МЕНЯ)))
0
Grossmeister
Модератор
3426 / 2475 / 425
Регистрация: 21.01.2011
Сообщений: 10,870
01.10.2014, 10:46 4
Как ты думаешь, что будет, если в триггере на UPDATE ON BILET выполнить операцию UPDATE BILET ?
Правильно, рекурсивный вызов этого же триггера, который опять выполнит UPDATE и т.д. После 32-го вызова Oracle вывалит ошибку.

А SELECT из 2-х таблиц без условия связи вернет декартово произведение строк этих таблиц.
0
murr
1 / 1 / 0
Регистрация: 15.05.2012
Сообщений: 128
06.10.2014, 14:53 5
olegar4, может логику другую придумать. Сделайте после обновления SEANSI подсчет поля.
или вот тут расписано про мутирование таблиц http://www.sql.ru/faq/faq_topic.aspx?fid=513
0
olegar4
0 / 0 / 1
Регистрация: 07.06.2013
Сообщений: 28
15.10.2014, 22:59  [ТС] 6
Спасибо всем)
0
15.10.2014, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2014, 22:59

Создание триггера для отслеживания изменений в БД
Здравствуйте. Не могу понять как создать триггер что бы при UPDATE таблици я...

Создание триггера для вычисления суммы в interbase
Есть 2 таблицы: CREATE TABLE NAKLADNAYA ( NAKL_ID Integer, DATA_NAKL...

Создание триггера
На моей формочке есть несколько комбобоксов и текстбоксов, к которые я вношу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru