Разделы презентаций


Тема: Триггеры PL/SQL

Содержание

ЛитератураСкотт Урман. Oracle 9 i. Программирование на языке PL/SQL. М.: «ЛОРИ». 2004. – 528 с.

Слайды и текст этой презентации

Слайд 1Тема: Триггеры PL/SQL
Вопросы:
Характеристика и типы триггеров
Триггеры DML
Операторные триггеры DML
Строковые триггеры

DML
Триггеры замещения
Системные триггеры





Тема: Триггеры PL/SQLВопросы:Характеристика и типы триггеровТриггеры DMLОператорные триггеры DMLСтроковые триггеры DMLТриггеры замещенияСистемные триггеры

Слайд 2Литература
Скотт Урман. Oracle 9 i. Программирование на языке PL/SQL. М.:

«ЛОРИ». 2004. – 528 с.





ЛитератураСкотт Урман. Oracle 9 i. Программирование на языке PL/SQL. М.: «ЛОРИ». 2004. – 528 с.

Слайд 3Характеристика и типы триггеров
Триггеры аналогичны процедурам и функциям, также являются

поименованными блоками PL/SQL и имеют разделы объявлений, выполняемый и обработки

исключений.
Триггер запускается автоматически при возникновении определенных событий:
операции DML (ISERT, UPDATE или DELETE), выполняемой над таблицей или представлением;
системного события, например, запуска или останова БД;
определенных видов операций DDL.



Характеристика и типы триггеров	Триггеры аналогичны процедурам и функциям, также являются поименованными блоками PL/SQL и имеют разделы объявлений,

Слайд 4Характеристика и типы триггеров
Назначение триггеров:

реализация сложных ограничений целостности данных;
контроль

за информацией в таблицах путем регистрации изменений и пользователей;
оповещение других программ о необходимых действиях при изменении информации в таблице;
сложный контроль защиты данных или специальный аудит;
публикация информации о событиях.
Типы триггеров:
триггеры DML (операторные или строковые);
триггеры замещения;
системные триггеры.



Характеристика и типы триггеров	Назначение триггеров:      реализация сложных ограничений целостности данных;

Слайд 5Триггеры DML
Триггер DML запускается оператором DML при выполнении операций вставки

(INSERT), удаления (DELETE ) или модификации (UPDATE) данных таблицы. Они

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

Триггеры DML	Триггер DML запускается оператором DML при выполнении операций вставки (INSERT), удаления (DELETE ) или модификации (UPDATE)

Слайд 6Типы триггеров DML

Типы триггеров DML

Слайд 7Порядок активизации триггеров DML
Триггеры активизируются при выполнении оператора DML. Алгоритм

выполнения оператора DML:
Выполняются операторные триггеры BEFORE (при наличии).
Для каждой строки,

на которую действует оператор:
Выполняются строковые триггеры BEFORE (при наличии).
Выполняется собственно оператор DML.
Выполняются строковые триггеры AFTER (при наличии).
3. Выполняются операторные триггеры AFTER (при наличии).


Порядок активизации триггеров DML	Триггеры активизируются при выполнении оператора DML. Алгоритм выполнения оператора DML:Выполняются операторные триггеры BEFORE (при

Слайд 8Триггеры DML
Если триггер запускается при выполнении оператора UPDATE, то для

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

триггерами предназначены операторы, которые могут переключать режим, разрешая или запрещая запуск триггера: — ALTER TRIGGER (изменяется режим указанного триггера) с опцией DISABLE или ENABLE и ALTER TABLE (переключается режим у всех триггеров, связанных с таблицей).

Триггеры DML	Если триггер запускается при выполнении оператора UPDATE, то для условий срабатывания могут быть указаны конкретные изменяемые

Слайд 9Создание триггеров
Оператор определения триггера имеет формат: 
CREATE [OR REPLACE] TRIGGER [имя_схемы.]

имя_триггера {BEFORE | AFTER}
{INSERT | DELETE | UPDATE [OF имя_столбца
[

, имя_столбца ... ]] }
[OR {INSERT | DELETE | UPDATE [OF имя_столбца
[ , имя_столбца ... ]] }...]
ON [имя_схемы.]{имя_таблицы \ имя_представления }
[FOR EACH ROW] [WHEN условие ]
программа_на_ PL/SQL
Создание триггеровОператор определения триггера имеет формат: CREATE [OR REPLACE] TRIGGER [имя_схемы.] имя_триггера {BEFORE | AFTER}{INSERT | DELETE |

Слайд 10Создание триггеров
Ключевое слово ON задает имя таблицы, ассоциированной с триггером.


Необязательное ключевое слово FOR EACH ROW определяет триггер как строковый.


Необязательное ключевое слово WHEN задает дополнительное логическое условие, сужающее область событий, при наступлении которых триггер запускается.
Создание триггеровКлючевое слово ON задает имя таблицы, ассоциированной с триггером. Необязательное ключевое слово FOR EACH ROW определяет

Слайд 11Операторные триггеры - пример
Пример. В среде SQL *Plus создадим таблицу:
SQL>

CREATE TABLE MILLER.ADT
(
3 USAL VARCHAR2(50),
TISP DATE


)
/ Таблица создана.

С ее помощью и операторного триггера организуем аудит доступа к таблице MILLER.CUSTOMERS.
Операторные триггеры - примерПример. В среде SQL *Plus создадим таблицу:SQL> CREATE TABLE MILLER.ADT ( 3  USAL

Слайд 12Операторные триггеры - пример
SQL> CREATE OR REPLACE TRIGGER testTrg
2

AFTER INSERT OR DELETE OR UPDATE ON customers
3
DECLARE


5
BEGIN
7
INSERT INTO MILLER.ADT(USAL, TISP)
VALUES(USER, SYSDATE);
10
END testTrg;
12 /.
Операторные триггеры - примерSQL> CREATE OR REPLACE TRIGGER testTrg 2 AFTER INSERT OR DELETE OR UPDATE ON

Слайд 13Операторные триггеры - пример
Добавим запись в таблицу MILLER.CUSTOMERS
SQL> INSERT

INTO CUSTOMERS(cust_num, company, cust_rep, credit_limit)
VALUES (2200, 'MyCompany', 107, 555.5643)


/ 1 строка создана.
В таблице аудита MILLER.ADT
SQL> SELECT USAL, TO_CHAR(TISP,'DD/MM/YYYY, HH24:MI:SS') TISM
FROM ADT

Получим: USAL TISM
----------------------------------------------------
MILLER 17/03/2004, 15:25:12
Операторные триггеры - примерДобавим запись в таблицу MILLER.CUSTOMERS SQL> INSERT INTO CUSTOMERS(cust_num, company, cust_rep, credit_limit) VALUES (2200,

Слайд 14Операторные и строковые триггеры - пример
CREATE TABLE MILLER.TSTTRIG
( ID NUMBER PRIMARY

KEY,
NM VARCHAR2(50),
ROD VARCHAR2(50),
INRW DATE )
Поля таблицы MILLER.TSTTRIG:
INSERT INTO TSTTRIG (ID,

NM, ROD, INRW)
VALUES (7369, 'SMITH', 'CLERK', TO_DATE('17-2-2000', 'DD-MM-YYYY'))
VALUES (7370, 'JONES', 'MANAGER', TO_DATE('2-4-2001', 'DD-MM-YYYY'))
VALUES (7371, 'MILLER', 'SALESMAN', TO_DATE('20-3-2003', 'DD-MM-YYYY'))
VALUES (7372, 'SCOTT', 'ANALYST', TO_DATE('09-12-2001', 'DD-MM-YYYY'))

Операторные и строковые триггеры - примерCREATE TABLE MILLER.TSTTRIG(	ID NUMBER PRIMARY KEY,	NM VARCHAR2(50),	ROD VARCHAR2(50),	INRW DATE )Поля таблицы MILLER.TSTTRIG:INSERT

Слайд 15Операторные и строковые триггеры - пример
Создадим для MILLER.TSTTRIG два операторных

триггера на моменты BEFORE и AFTER для события UPDATE:
CREATE

OR REPLACE TRIGGER BFOTST
BEFORE UPDATE ON TSTTRIG
DECLARE
BEGIN
INSERT INTO ADT(USAL, TISP, WDO, PRIM)
VALUES(USER,SYSDATE,'Update‘,'Before Statement trigger');
END BFOTST;
CREATE OR REPLACE TRIGGER AFTTST
AFTER UPDATE ON TSTTRIG
DECLARE
BEGIN
INSERT INTO ADT(USAL, TISP, WDO, PRIM)
VALUES(USER, SYSDATE, 'Update', 'After Statement trigger');
END AFTTST;
Операторные и строковые триггеры - примерСоздадим для MILLER.TSTTRIG два операторных триггера на моменты BEFORE и AFTER для

Слайд 16Операторные и строковые триггеры - пример
Создадим строковые триггеры по тому

же принципу, но отличаются они наличием FOR EACH ROW.
CREATE

OR REPLACE TRIGGER BFOTSTR
BEFORE UPDATE ON TSTTRIG
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO ADT(USAL, TISP, WDO, PRIM)
VALUES(USER, SYSDATE, 'Update', 'Before Row trigger');
END BFOTSTR;

Операторные и строковые триггеры - примерСоздадим строковые триггеры по тому же принципу, но отличаются они наличием FOR

Слайд 17Операторные и строковые триггеры - пример
CREATE OR REPLACE TRIGGER AFTTSTR
AFTER

UPDATE ON TSTTRIG
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO ADT(USAL, TISP, WDO, PRIM)
VALUES(USER,

SYSDATE, 'Update', 'After Row trigger');
END AFTTSTR;

Введем оператор, для таблицы MILLER.TSTTRIG:
UPDATE MILLER.TSTTRIG
SET ROD = 'SPOOKY'
WHERE ID IN (7369, 7370)
Изменено две строки! Так как условие оператора UPDATE соответствует в нашем случае двум записям.



Операторные и строковые триггеры - примерCREATE OR REPLACE TRIGGER AFTTSTR	AFTER UPDATE ON TSTTRIG	FOR EACH ROWDECLAREBEGININSERT INTO ADT(USAL,

Слайд 18Строковые триггеры - пример
содержимое таблицы MILLER.ADT:
SQL> SELECT * FROM

MILLER.ADT
2 /
 USAL

TISP WDO PRIM
-------------------- ----------- ----------------- ------------------------
MILLER 17.03.2004 Update Before Statement trigger
MILLER 17.03.2004 Update Before Row trigger
MILLER 17.03.2004 Update After Row trigger
MILLER 17.03.2004 Update Before Row trigger
MILLER 17.03.2004 Update After Row trigger
MILLER 17.03.2004 Update After Statement trigger
 6 rows selected
 Операторный триггер сработал два раза на BEFORE и AFTER, а строковый четыре раза! Потому, что изменили две строки!
Строковые триггеры - примерсодержимое таблицы MILLER.ADT: SQL> SELECT * FROM MILLER.ADT 2 / USAL

Слайд 19 Замещающие триггеры создаются только для представлений. В отличие от триггеров

DML, выполняемых в дополнение к операторам DML, замещающие триггеры выполняются

вместо операторов DML, вызывающих их срабатывание. Замещающий триггер должен быть строковым.
Если представление является не модифицируемым, то для него можно создать замещающий триггер, выполняющий нужные действия и тем самым разрешающий его модификацию.
Замещающий триггер можно создать и для модифицируемого представления, если требуется дополнительная обработка информации.

Замещающие триггеры

Замещающие триггеры создаются только для представлений. В отличие от триггеров DML, выполняемых в дополнение к операторам DML,

Слайд 20CREATE OR REPLACE VIEW classes_rooms AS
SELECT department, course, building, room_number
FROM

rooms, classes
WHERE rooms. room_id = classes.room_id;
Создадим представление classes_rooms :
Ввести информацию

в это представление нельзя. Над ним можно выполнить операции обновления или удаления данных, но, скорее всего, эти действия будут некорректны.
Например, в результате выполнения над classes_rooms операции DELETE будут удалены соответствующие строки из classes.

Пример замещающего триггера

CREATE OR REPLACE VIEW classes_rooms ASSELECT department, course, building, room_numberFROM rooms, classesWHERE rooms. room_id = classes.room_id;Создадим представление

Слайд 21CREATE TRIGGER ClassesRoomsInsert
INSTEAD OF INSERT ON classes_rooms
DECLARE
v_roomID rooms.room_id%TYPE;
BEGIN

-- Определим идентификатор аудитории.
SELECT room_id
INTO v_roomID


FROM rooms
WHERE building = :new.building
AND room_number = :new.room_number;

Создадим триггер замещения и с его помощью выполним обновление базовых таблиц:

Пример замещающего триггера

CREATE TRIGGER ClassesRoomsInsert	INSTEAD OF INSERT ON classes_roomsDECLARE	v_roomID rooms.room_id%TYPE;BEGIN     -- Определим идентификатор аудитории.SELECT room_id

Слайд 22 -- Обновим группу.
UPDATE CLASSES

SET room_id = v_roomlD
WHERE department

= :new.department
AND course = :new.course;

END ClassesRoomsInsert;

С помощью триггера ClassesRoomsInsert оператор INSERT выполняется успешно.

Пример замещающего триггера

-- Обновим группу.   UPDATE CLASSES    SET room_id = v_roomlD

Слайд 23Системные триггеры
Системные триггеры активизируются на события DDL или самой

БД.
К событиям DDL относятся операторы CREATE, DROP, ALTER.
К

событиям базы данных относятся: - запуск останов сервера, регистрация отключение пользователя БД, ошибка сервера.
Формат создания системного триггера:
CREATE OR REPLACE TRIGGER [схема.]имя_триггера
{BEFORE | AFTER}
{список_событий_DDL | список_событий_базы_данных}
ON {DATABASE | [схема.]SCHEMA}
конструкция_REFERENCING
[условие_WHEN]
тело триггера;
Системные триггеры Системные триггеры активизируются на события DDL 	или самой БД. К событиям DDL относятся операторы CREATE,

Слайд 24Системные триггеры
Где: список_событий_DDL - одно или несколько событий DDL

(разделяемых OR)
список_событий_базы_данных - одно или несколько событий БД (разделяемых

OR)
Системные триггеры Где: список_событий_DDL - одно или несколько событий DDL (разделяемых OR) список_событий_базы_данных - одно или несколько

Слайд 25Системные триггеры

Системные триггеры

Слайд 26Системные триггеры - пример
Пример. Системный аудит. Запускаем *SQL/Plus с

правами SYSTEM. Создадим таблицу для фиксации регистрации пользователей на уровне

БД:
SQL> CREATE TABLE SYSTEM.AUDTBASE
(
NZAP NUMBER,
POLZ VARCHAR2(20),
TMIN DATE,
OPER VARCHAR2(50)
)
8 / 

Системные триггеры - пример Пример. Системный аудит. Запускаем *SQL/Plus с правами SYSTEM. Создадим таблицу для фиксации регистрации

Слайд 27Системные триггеры - пример
Пример. Системный аудит. Создадим триггер:
SQL> CREATE OR

REPLACE TRIGGER FIXUSERIN
AFTER LOGON ON DATABASE
3
BEGIN


5
INSERT INTO SYSTEM.AUDTBASE(NZAP, POLZ, TMIN, OPER)
VALUES(1, USER, SYSDATE, 'UserIsLog(off)');
8
END FIXUSERIN;
/ Триггер создан.

Системные триггеры - примерПример. Системный аудит. Создадим триггер:SQL> CREATE OR REPLACE TRIGGER FIXUSERIN AFTER LOGON ON DATABASE

Слайд 28Системные триггеры - пример
Пример. Системный аудит. Просмотрим содержимое таблицы в

первом сеансе:
SQL> SELECT NZAP, POLZ, TO_CHAR(TMIN,'DD.MM.YYYY HH24:MI:SS'), OPER FROM SYSTEM.AUDTBASE


/
Результат:
NZAP POLZ TO_CHAR(TMIN,'DD.MM.YYYYHH24:M OPER
--------------- ------------------------------ --------------------
1 SYS 22.03.2003 16:35:50 UserIsLog(off)
1 SYS 22.03.2003 16:35:50 UserIsLog(off)
1 SYS 22.03.2003 16:37:38 UserIsLog(off)
1 MILLER 22.03.2003 16:38:44 UserIsLog(off)
1 MILLER 22.03.2003 16:38:44 UserIsLog(off)
1 MILLER 22.03.2003 16:38:46 UserIsLog(off) 
6 строк выбрано.
Системные триггеры - примерПример. Системный аудит. Просмотрим содержимое таблицы в первом сеансе:SQL> SELECT NZAP, POLZ, TO_CHAR(TMIN,'DD.MM.YYYY HH24:MI:SS'),

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика