Работа с oracle database 11g

Уважаемые пикабушники. Может быть, среди Вас найдется специалист в области pl sql, который сможет пояснить некоторые нюансы в построении DML, compound триггеров, сможет объяснить, как правильно интерпретировать и избежать мутации в таблицах БД.
p.s. Есть своя БД, написанная в учебных целях, а также несколько идей триггеров, сложность реализации которых требует помощи.

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Любопытно :)

раскрыть ветку (11)
0
Автор поста оценил этот комментарий
Можете помочь?)
раскрыть ветку (10)
0
Автор поста оценил этот комментарий

Если задача не слишком замудренная. Давно ораклом баловался

раскрыть ветку (9)
1
Автор поста оценил этот комментарий

Суть триггера в том, что мне нужно следить за наличием товара и не собирать заказ, состоящий из более 100 единиц товара. Как я понимаю, нужно работать с таблицей Заказано

Вот код, который я написал для этой задачи:

Create or replace trigger Zadanie

Before insert or update or delete

On Zakazano

for each row

Declare

Col_zakaz Exception;

abc Zakazano.num%TYPE;

Begin

Select count(num) into abc from Zakazano where p_code =:new.p_code;

If abc > 100 then raise Col_zakaz;

End if;

Exception

When Col_zakaz then raise_application_error (-20008, 'Невозможно добавить в заказ более 100 единиц товара');

End Zadanie;

/

num - количество из таблицы Заказано, p_code - код товара

p.s. Жаль не могу прикрепить фото

раскрыть ветку (7)
0
Автор поста оценил этот комментарий

Может лучше бизнес-логику вынести из триггера, создать к примеру, пакет, в нем процедуры добавление, изменение, удаление записи заказа. И уже там можно реализовывать любую логику.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Менее костыль, но всё равно костыль. Тогда уж вне БД вообще лучше. Проблемы есть вызванные этим - тогда всё равно триггеры будет нельзя использовать при таком, а они почти везде в dbsync софте.

0
Автор поста оценил этот комментарий
Только select без count: select num into abc ...
раскрыть ветку (4)
0
Автор поста оценил этот комментарий

А вот без count, num - чистейший PK update, обходится опять же академически, вторая ссылка, напоминаю - ЭТО КОСТЫЛЬ!!!

0
Автор поста оценил этот комментарий

Не напрямую, но пошлёт скорее всего - запрос к той же таблице на count.


Всё академически, простой случай. Описано тут. Только не спрашивай зачем package, по сути для переменных.


stevenfeuersteinonplsql.blogspo_t.com/2016/12/get-rid-of-mutating-table-trigger.html

https://oracle-base.com/articles/9i/mutating-table-exception...

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Я как понимаю, в пакет мы должны сразу записать переменную, потому что мутация происходит из-за того, что идёт обращение к переменной таблицы, которую ещё не записали?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не совсем так. Не в пакет, а куда-либо вообще, триггер существует на момент вставки, потому использование таблицы в нём запрещено. Самый простой способ - как пишут ниже, но процедура как бы обязательно и так требует места хранения и имеет ограничения, вот далее когда надо проделать нечто в духе foreach надо уже использовать переменные пакета...

0
Автор поста оценил этот комментарий

В данном случае, я как понимаю, должна быть мутация записей?)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества