Задачи, решаемые при помощи триггеров. Языки, используемые при создании триггеров.
Триггеры (trigger) являются особой разновидностью хранимых процедур, выполняемых автоматически (срабатывающих) при модификации данных таблицы. Триггеры находят разное применение — от проверки данных до обеспечения сложных деловых правил. Особенно полезным свойством триггеров является то, что они имеют доступ к образам записи до и после модификации; таким образом вы можете сравнить две записи и принять соответствующее решение.
Использование триггеров Триггеры используются для различных целей, в том числе: Обеспечения ссылочной целостности. Триггеры используются для поддержания ссылочной целостности, когда ее критерии слишком сложны для определения на уровне таблиц. В частности, сюда относится возможность каскадных обновлений и удалений первичных ключей. Комплексного обеспечения целостности доменов. При необходимости триггеры могут использоваться для проверки значений в других таблицах и базах данных, а также для сравнения образов данных до и после обновления. Обеспечения сложных деловых правил. С помощью триггеров решаются такие задачи, как автоматическое оформление заказов на покупку при малом количестве товара на складе или отмена поставки при задержке платежей. Выбор сложных значений по умолчанию. Триггеры позволяют принимать решения при выборе значения по умолчанию для столбцов. Это полезная возможность, поскольку пользовательские значения по умолчанию допускают лишь одно конкретное значение для каждого столбца. Триггеры используются для обеспечения целостности данных. Такая возможность бывает полезной при логическом сегментировании данных или при обработке дубликатов данных по соображениям быстродействия (например, для получения сводной информации).
Срабатывание триггеров Триггеры закрепляются за таблицей и срабатывают в ответ на определенные команды DML (Data Modification Language, поднабор команд Transact-SQL). Иначе говоря, выполнение команды, модифицирующей запись, всегда приводит к срабатыванию триггера. Поскольку триггер является частью исходной транзакции, он может вызвать откат отдельной команды или всей транзакции. Благодаря этому появляется возможность контролировать модификацию таблиц с помощью логики, связанной с таблицей. Триггеры выполняются только один раз для одной команды модификации данных, независимо от количества обрабатываемых записей (даже если команда не влияет ни на одну запись или, наоборот, обрабатывает все записи таблицы).Команда создания триггера имеет следующий синтаксис:
CREATE TRIGGER имя_ триггера ON имя_таблицы[WITH ENCRYPTION]FOR {INSERT | UPDATE | DELETE} [,...][WITH APPEND][NOT FOR REPLICATION]AS[команды SQL][RETURN]
При создании триггеров необходимо учитывать некоторые второстепенные обстоятельства: Если вы задаете владельца триггера, также необходимо задать владельца таблицы (особенность синтаксиса языка). Хотя триггеры во многих отношениях похожи на хранимые процедуры, они не получают параметров при вызове и не могут явно вызываться или выполняться из программы. Команда CREATE TRIGGER должна быть первой командой в пакете. Триггеры действуют лишь в базовых таблицах. Тем не менее, можно создавать представления для таблиц, содержащих триггеры. Чтобы создать триггер, необходимо либо быть владельцем объекта, либо обладать ролью db_owner или db_ddladmin.
Триггер определяет действие, которое должно быть предпринято базой данных при возникновении в приложении некоторого события. Триггер может использоваться для осуществления определенных ограничений ссылочной целостности, комплексных ограничений предметной области базы данных или для контроля изменений в данных. Код внутри триггера, называемый телом триггера, состоит из блока PL/SQL, программы на языке Java или из подпрограммы на языке С, Триггеры базируются на модели "событие-условие-действие" (EventCondition-Action — EGA), Как событие (или события), которое управляет триггером в Oracle, рассматриваются операторы INSERT, UPDATE или DELETE, применяемые к указанной таблице (или, возможно, представлению); операторы CREATE, ALT3R или DROP, применяемые к любому объекту схемы; запуск базы данных или останов экземпляра Oracle; регистрация пользователя в системе или выход из нее; конкретное или любое сообщение об ошибке.Также можно определить, когда должен сработать триггер — до или послесобытия. Условие, которое определяет, должно ли быть выполнено действие. Условие является необязательным, но если оно определено, то действие должно быть выполнено только тогда, когда это условие истинно. Действие, которое должно быть предпринято. Этот блок содержит операторы SQL и код, которые должны быть выполнены, когда выдается активи-зирующий оператор и условие активизации триггера принимает истинное значение.
Есть два типа триггеров: строковые триггеры (row-level triggers), которые выполняются для каждой затронутой активизирующим событием строки таблицы, и операторные триггеры (statement-level triggers), выполняющиеся только один раз, даже если активизирующее событие затрагивает множество строк. База данных Oracle поддерживает также триггеры INSTEAD-OF, обеспечивающие прозрачный способ модификации представлений, которые не могут быть модифицированы непосредственно с помощью операторов SQL DML (INSERT, UPDATE и DELETE). Эти триггеры называются триггерами INSTEAD-OF, поскольку, в отличие от триггеров других типов, база данных Oracle активизирует их вместо (instead-of) выполнения первоначального оператора SQL. Триггеры могут также активизировать друг друга. Это может происходить, когда действие триггера влечет за собой внесение изменения в базе данных, которое, в свою очередь, вызывает другое событие, с которым также связан триггер. Использование триггеров для реализации ссылочной целостности Oracle выполняются действия ON DELETE NO ACTION И ON UPDATE NO ACTION на уровне ссылок на именованные внешние ключи. СУБД Oracle также предоставляет возможность определения дополнительного выражения ON DELETE CASCADE для того, чтобы разрешить каскадное распространение операции удаления строк из родительской таблицы на дочернюю таблицу. Но эта база данных не поддерживает действие ON UPDATE CASCADE или действия SET DEFAULT и SET NULL. Если эти действия необходимы, то они должны быть реализованы как триггеры или хранимые процедуры либо выполнены в коде приложения.
2)Структура предложения SELECT, условия выбора (понятие алиасов, возможности параметра WHERE). Соединение таблиц. Выборка вычисляемых значений. Выборка с исключением дубликатов (DISTINCT).
АЛИАСЫ:
SELECT column AS column_alias FROM table;
SELECT LastName AS Family, FirstName AS Name FROM Persons - выводится на экран
SELECT column FROM table AS table_alias;
SELECT LastName, FirstName FROM Persons AS Employees – Получим таблицу под назв Employees
Селект с условием: SELECT column FROM table WHERE column operator value
SELECT * FROM Persons WHERE LastName IN ('Hansen','Pettersen'); "Persons"
SELECT * FROM Persons WHERE City='Sandnes‘
SELECT без повторов: SELECT DISTINCT column_name(s) FROM table_name; - используется пво избежание повторов одинаковых строк