Содержание
- 2. Триггеры - это хранимые процедуры, которые срабатывают при определенном событии, в основном при выполнении операций модификации
- 3. Существуют триггеры, которые срабатывают до момента срабатывания одного из операторов INSERT, UPDATE, DELETE (триггеры BEFORE), и
- 4. Теперь попробуем с помощью нее и нового триггера организовать некий аудит в системе доступа к таблице
- 5. После выполнения команды вставки данных в таблицу CUSTOMERS: INSERT INTO CUSTOMERS (cust_num, company, cust_rep, credit_limit) VALUES
- 6. Помимо деления триггеров на AFTER и BEFORE, существует также деление триггеров на операторный триггер и строковый.
- 7. Чтобы четко представлять, всю картину работы триггеров таблиц БД создадим пару таблиц и наполним их данными:
- 8. Создадим еще одну таблицу: CREATE TABLE TSTSV ( ID NUMBER PRIMARY KEY, IDD VARCHAR(50), ROD VARCHAR(50),
- 9. Строим зависимость таблицы TSTSV от таблицы TSTTRIG по полям CONS и ID соответственно: ALTER TABLE TSTSV
- 10. CREATE OR REPLACE TRIGGER BFOTST BEFORE UPDATE ON TSTTRIG DECLARE BEGIN INSERT INTO ADT VALUES(‘BFOTST операторный‘,
- 11. Операторные триггеры созданы. Теперь создадим строковые по тому же принципу, но отличаться они будут наличием конструкции
- 12. Почистим таблицу ADT: DELETE FROM ADT; А вот теперь попробуем ввести такой оператор, для таблички TSTTRIG:
- 13. Вернем полям таблицы TSTTRIG прежние значения и очистим таблицу ADT: UPDATE TSTTRIG SET ROD = 'CLERK'
- 14. Создадим триггер, для копирования данных во 2-ю таблицу: CREATE OR REPLACE TRIGGER AFTINSTTRIG AFTER INSERT ON
- 15. Триггер AFTINSTTRIG срабатывает после вставки в таблицу TSTTRIG. Выполним оператор добавления данных в таблицу TSTTRIG .
- 16. Таким образом один INSERT работает на две таблицы. Триггер типа AFTER, т.к. поле :NEW.ID определяется после
- 17. Данный триггер следит за изменением полей NM, ROD, ID в таблице TSTTRIG и отражает изменения в
- 18. CREATE OR REPLACE TRIGGER BFRDELTTRIG BEFORE DELETE ON TSTTRIG FOR EACH ROW DECLARE BEGIN DELETE FROM
- 19. Заметим, что в строковом триггере BEFORE можно менять псевдозапись :new. Менять псевдозапись :new в строковом триггере
- 20. ALTER TABLE TSTTRIG ADD COST NUMBER; ALTER TABLE TSTSV ADD ITOG NUMBER; В этих полях будут
- 21. Создадим триггер с условием: CREATE OR REPLACE TRIGGER WHENTRG BEFORE INSERT OR UPDATE OF COST ON
- 22. Строка OF COST ON TSTTRIG определяет поле, на которое устанавливает условие триггера и собственно само условие
- 23. Изменим одну из записей таблички TSTTRIG (запомнив, что ее старое содержимое было равно 10205): UPDATE TSTTRIG
- 24. Выполним другой запрос: UPDATE TSTTRIG SET COST = 5342 WHERE NM = 'MILLER'; SELECT * FROM
- 25. Запись (8001, BOB, DUMMY, 09.11.1989, 24734) - добавлена в таблицу TSTTRIG. Триггеры из прошлых шагов так
- 26. Предикаты В триггерах БД Oracle возможно применение предикатов - логических операторов. Они имеют следующие определения: INSERTING,
- 27. Создадим таблицу MYAUDIT: CREATE TABLE MYAUDIT ( POLZ VARCHAR(15), VIZM DATE, OPER VARCHAR(20), NZAP NUMBER, HIST
- 28. CREATE OR REPLACE TRIGGER AUDT_TSTTRIG BEFORE INSERT OR UPDATE OR DELETE ON TSTTRIG FOR EACH ROW
- 29. Данный триггер имеет временное действие "ДО"! Попробуем добавить запись в таблицу TSTTRIG: INSERT INTO TSTTRIG VALUES
- 30. Изменим запись в таблице TSTTRIG следующим образом: UPDATE TSTTRIG SET NM = 'ALF' WHERE NM =
- 32. Скачать презентацию