Главная » Просмотр файлов » Брешенков А.В., Галямова Е.В., Ефремов С.В. - Процедуры и функции в Oracle, Триггеры в Oracle

Брешенков А.В., Галямова Е.В., Ефремов С.В. - Процедуры и функции в Oracle, Триггеры в Oracle (1075561), страница 3

Файл №1075561 Брешенков А.В., Галямова Е.В., Ефремов С.В. - Процедуры и функции в Oracle, Триггеры в Oracle (Брешенков А.В., Галямова Е.В., Ефремов С.В. - Процедуры и функции в Oracle, Триггеры в Oracle) 3 страницаБрешенков А.В., Галямова Е.В., Ефремов С.В. - Процедуры и функции в Oracle, Триггеры в Oracle (1075561) страница 32017-12-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Исполнительная часть триггера может содержать SQLвыражение или программную часть.22.1Обзор триггеров.Типы триггеров.Триггеры могут быть описаны в виде PL/SQL запросов или C процедур, связанныхс таблицами, видами, событиями или самой базой данных. СУБД Oracle XEавтоматически вызывает триггер, когда происходит специфическое событие, которымобычно является DML выражение, связанное с таблицей. Существуют следующие типытриггеров:DML триггеры таблиц.INSTEAD OF триггеры видов.Системные триггеры событий, связанные с базой данных (DATABASE) илисхемой (SCHEMA).Вы можете создавать триггеры, связанные со следующими выражениями:2.2DML выражения (DELETE, INSERT, UPDATE).DDL выражения(CREATE, ALTER, DROP).Операции базы данных (LOGON, LOGOFF).Именование триггеровПри создании триггеров необходимо иметь ввиду, что имена триггеров должныбыть уникальны, то есть в рамках одной схемы (например, «HR») не должно бытьтриггеров с одинаковыми названиями.

В СУБД Oracle допускается совпадение иментриггеров и таблиц или видов, однако не рекомендуется так делать. Одинаковые названиямогут привести к путанице и усложнению управления базы данных.2.3В каких случаях вызывается триггер?Для того, чтобы вызвался триггер необходимо в его описании указать следующиеособенности:SQL выражение или системное событие, событие БД или DML событие,которое обратиться к «телу» триггера.

Опции могут содержать выраженияDELETE, INSERT или UPDATE по одному или все сразу.Должен быть указан объект, связанный с триггером: таблица, вид, базаданных или схема.Если триггер содержит следующее выражение:AFTER DELETE OR INSERT OR UPDATE ON employees ...То любое из следующих выражений запустят триггер:DELETE FROM employees WHERE ...;INSERT INTO employees VALUES ( ... );INSERT INTO employees SELECT ... FROM ... ;UPDATE employees SET ... ;Выражение UPDATE может содержать список колонок, которые будут проверятьсяна наличие изменений. Если указаны названия колонок, то триггер будет срабатыватьтолько после изменений этих колонок. Если они не заданы, то – после любого изменениятаблицы. Нельзя указывать список колонок в выражениях DELETE и INSERT, потому чтоудаляются и добавляются сразу все колонки одной строки.

В примере №1 описан триггерaudit_sal, который следит только за колонкой salary из таблицы employees. Изменениядругих колонок этой таблицы не запустят данный триггер.2.4Моменты запуска триггера.В четырех следующих разделах рассматриваются опции, с помощью которыхопределяется в какой момент вызывать процедуру триггера.2.4.1 Запуск триггера с помощью опций BEFORE и AFTER.Опции BEFORE и AFTER в выражении CREATE TRIGGER явно показывают, вкакой момент запускать тело триггера в зависимости от необходимости. Опции находятсяпосле выражения CREATE TRIGGER, до тела процедуры триггера.Примеры №1 и №2 демонстрируют работу триггера с опциями BEFORE и AFTER.Если в СУБД используются выражения DELETE или UPDATE, то Oracleсравнивает их с правильным вариантом написания UPDATE или DELETE.

В случаенекорректности сравнения СУБД использует процедуру отката (ROLLBACK) иперезапускает выражения. Так может продолжаться много раз, пока не достигнетсяположительный результат. Каждый раз при перезапуске запускается триггер с опциейBEFORE. Откат не производит никаких изменений в триггере, поэтому чтобы избежатьизбыточных действий в триггере,необходимо предусмотреть счетчик, который подостижении границы останавливал бы запуск триггера.2.4.2 Запуск триггера с помощью опции FOR EACH ROW.Опция FOR EACH ROW определяет, будет ли триггер строковым или будеттриггером выражения. Если Вы применяете эту опцию, триггер выполнит все действиядля каждой строки таблицы согласно условиям в описании триггера.Примеры №1 и №2 демонстрируют работу триггеров с опцией FOR EACH ROW.Суть опции FOR EACH ROW в том, чтобы показать, что триггер запускаетсятолько один раз после всех изменений, а не отдельно для каждой строки таблицы.Триггеры такого типа относятся к триггерам на уровне выражений и используются дляпроверок правильности занесения данных.2.4.3 Запуск триггера с помощью задания условий (выражения WHEN)Можно создать триггер, который будет запускаться только в случае выполненияконкретного условия.

Такие опции называются опциями ограничениями и задаются спомощью SQL выражения булевского типа в условии WHEN.Если необходимо, триггер будет проверять каждую строку таблицы насоответствия заданному условию. Если условие будет выполнено (переменная получитзначение TRUE), то тело триггера будет запущено. Если условие не будет выполнено(переменная получит значение FALSE), то тело триггера запущено не будет. В примере№2 показан вариант создания триггера с условием.Выражение в условии WHEN может быть SQL типа, но не может содержатьподзапросов. Вы не можете использовать PL\SQL код в выражении WHEN. УсловиеWHEN не может также содержаться в описании триггера.2.4.4 Запуск триггера с помощью опции INSTEAD OF.Опция INSTEAD OF позволяет избежать возникновения каких-либо событий,заменяя его на другое, описанное в теле триггера.С помощью триггеров такого типа Вы можете запускать выражения UPDATE,INSERT и DELETE применительно к сложным видам, которые не могут быть измененыдругими способами.

Также триггер можно использовать для проверки корректностиизменений вида. Триггеры с опцией INSTEAD OF запускаются в основном «на заднемплане», чтобы выполнить необходимые действия с подчиняющимися виду таблицами.Они могут применяться только к видам и будут использоваться для каждой строкитаблицы. Триггеры корректны только для выражений DML и не могут содержатьвыражения DDL или события базы данных.Пример триггера с этой опцией рассматривается под третьим номером.Доступ к колонкам таблиц в строковых триггерах.2.5В теле триггера строкового типа могут содержаться SQL запросы и PL\SQLпроцедуры, относящиеся как к старым колонкам таблицы, так и к новым, измененнымтриггером.Существуюспециальныевыражениядляобозначенияколонок:«:OLD.column_name» и «:NEW.column_name».В зависимости от типа выражения триггера некоторые имена могут не иметьсмысла.Триггер, запущенный выражением INSERT, имеет доступ только к новому имени,потому что у старого значение – «NULL».Триггер, запущенный выражением UPDATE, имеет доступ как к старому имени,так и к новому.

Это связано с тем, что изменения могут касаться как старого так инового имени.Триггер, запущенный выражением DELETE, имеет доступ только к старому имени,потому что новое получит значение «NULL».2.6Определение DML операции, запускающей триггер.Если необходимо, чтобы триггер запускался не по одному DML выражению,такому как ON INSERT или UPDATE, а сразу по нескольким, то тело триггера можетсодержать производные от этих слов, - INSERTING, UPDATING и DELETING. Этослужит для проверки, какое конкретно условие выполнилось.

Пример №3 демонстрируеттакой вариант.В UPDATE триггере можно указать, какой конкретно столбец таблицы необходимопроверять. Для этого после UPDATING указывается имя колонки. Например, так:CREATE OR REPLACE TRIGGER ...... UPDATE OF salary ON employees ...BEGIN... IF UPDATING ('salary') THEN ... END IF;...Код после THEN будет выполнен только, если будут произведены изменения вколонке «salary».

Таким образом можно уменьшить заголовок триггера, перенеся всеусловия в тело триггера.2.7Включение и выключение триггера.Триггеры можно включать и выключать по желанию. Включенный триггер будетсрабатывать, когда будет выполняться условие в его заголовке. Выключенный же триггерне будет срабатывать, ни при каких условиях. Отключайте триггеры в случае, когда выпроверяете работоспособность процедур и функций, связанных с таблицами, к которымпривязаны триггеры.33.1Создание триггеров.Рекомендации по созданию триггеров.Используйте следующие рекомендации при создании триггеров:Используйте триггеры для выполнения специфических операций илидействий.Не создавайте триггеры, которые дублируют уже существующие в Oracleвстроенные триггеры. Например, триггеры, проверяющие на соответствиетип вносимых данных и тип колонки в таблице.Ограничивайте триггеры по размеру.

Если код триггера не умещается в 60строк кода, лучше перенесите его в хранимую процедуру, и вызывайте ее втеле триггера. Размер триггера не может быть больше 32 кБ.Создавайте триггеры, которые можно было бы применять глобально ко всейбазе данных или схеме, не обращающие внимания на пользователя илиприложение базы данных.Не создавайте рекурсивных триггеров. Это может привести к зацикливаниюпроцедуры выполнения и к тому, что вся память будет отобрана длявыполнения триггера.Используйте триггеры только там, где они действительно необходимо.

Онивыполняются для любого приложения, любого пользователя и любогособытия, описанного в условии триггера.3.2Ограничения по созданию триггеров.При создании триггеров необходимо учитывать, что существуют определенныеограничения на создание триггеров.3.2.1 SQL выражения, приемлемые при создании триггеров.Тело триггера может содержать DML выражения. Также может содержать SELECTвыражения, но они должны состоять из SELECT..INTO.. выражений или SELECTвыражений, использующих указатель мыши.В теле триггера нельзя использовать: DDL выражения, выражения по контролютранзакций, ROLLBACK, COMMIT и SАVEPOINT выражения.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6505
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее