Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тригер спрацьовує автоматично при виконанні над таблицею команд SQL INSERT UPDTE або DELETE і запускає функцію

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.11.2024

PAGE  3

        16 Тригери 

        PostgreSQL підтримує нестандартні розширення SQL, які називаються тригерами (trigger). Тригер спрацьовує автоматично при виконанні над таблицею команд SQL INSERT, UPDATE або DELETE і запускає функцію, яка буде виконуватися до або після цих операцій.

        Механізм обмежень PostgreSQL (CONSTRAINT) дозволяє реалізувати прості порівняння вхідних даних із статичними значеннями, але іноді перевірка повинна проводитися за більш  складними критеріями. Це типовий приклад ситуації, в якій зручно скористатися тригером.

        Визначення тригера має такий вигляд:

        CREATE TRIGGER тригер { BEFORE | AFTER } { подія [ OR подія ] } ON таблиця

        FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE функція( аргументи )

        Нижче подаються короткі описи компонентів цього визначення:

  •  CREATE TRIGGER тригер. Аргумент тригер означає ім’я тригера. Воно може збігатися з уже існуючим у базі даних, за умови, що цей тригер призначений для іншої таблиці;
  •  BEFORE | AFTER. Ключове слово BEFORE означає, що функція повинна виконуватися перед спробою виконання операції, включаючи всі вбудовані перевірки обмежень даних, які реалізовуються при виконанні команд INSERT і DELETE. AFTER означає, що функція викликається після завершення операції, яка приводить у дію тригер;
  •  подія [OR подія ...] – події SQL. При перерахуванні декількох подій як роздільник використовується ключове слово OR;
  •  ON таблиця – ім’я таблиці, модифікація якої спричиняє запуск тригера;
  •  FOR EACH { ROW | STATEMENT } – визначення кількості викликів функції при настанні вказаної події. ROW означає, що функція викликається для кожного запису, який модифікується. Якщо функція повинна викликатися всього один раз для всієї команди, то використовується ключове слово STATEMENT;
  •  EXECUTE PROCEDURE функція(аргументи) – ім’я функції з аргументами, яку викликає тригер.

        Таблиця 1 – Структура системної таблиці pg_trigger

Ім’я поля таблиці pg_trigger

Тип поля

Опис змінної

tgrelid

oid

Системний ідетифікатор запису таблиці, яку обслуговує тригер

tgname

name

Ім’я тригера

tgfoid

oid

tgtype

smallint

tgenabled

“char”

tgisconstraint

old

tgconstrname

name

tgconstrrelid

oid

tgdeferrable

boolean

tginitdeferred

boolean

tgnargs

smallint

tgattr

int2vector

tgargs

bytea

        Отримати інформацію про існуючі тригери можна із системної таблиці pg_trigger, структура якої приведена в таблиці 1. Більшість її полів у запитах прямо не використовуються. Серед атрибутів тригера центральне місце займають tgrelid і tgname. У полі tgrelid зберігається ідентифікатор відношення, з яким пов’язаний даний тригер.

        Створення або видалення тригера дозволено лише суперкористувачу або власнику бази даних. Команда видалення тригера має такий вигляд:

        DROP TRIGGER імя ON таблиця

        У прикладі 1 показано видалення тригера check_ship, встановленого для таблиці ship.

        Приклад 1 – Видалення тригера

        DROP TRIGGER check_ship ON ship;

 

        Зауважимо, що при видаленні вказується не тільки ім’я тригера, але й ім’я таблиці.

        Ім’я таблиці, для якої був установлений тригер, при необхідності можна прочитати з системних таблиць PostgreSQL. Наприклад, можна провести об’єднання полів tgrelid системної таблиці pg_trigger і поля relfilenode системної таблиці pg_class та порівняти ім’я тригера з полем tgname. Запит, приведений у прикладі 2, повертає ім’я таблиці (relname), зв’язаної з тригером check_ship. Як видно з результатів запиту, це одна таблиця ship.

        Приклад 2 – Отримання імені таблиці, пов’язаної з тригером check_ship

        SELECT relname FROM pg_class

        INNER JOIN pg_trigger ON (tgrelid = relfilenode)

        WHERE tgname = 'check_ship';

 relname

-----------

ship

(1 row)

        Визначення тригера PostgreSQL може містити посилання на тригерну функцію, тобто функцію, яка повинна викликатися при спрацьовуванні тригера. Не слід плутати визначення тригера з визначенням функції. Тригер визначається командою SQL CREATE TRIGGER, а тригерна функція – CREATE FUNCTION.  

        Тригерна функція повинна бути визначена до визначення тригера, який її викликає. Тригерні функції завжди визначаються раніше, ніж тригери.

        При видаленні функції, яку викликає тригер, він перестає працювати, причому повторне визначення функції з тим же ім’ям не виправить проблему. Після повторного створення функції тригер також доводиться створювати наново.

      Тригерна функція визначається без аргументів і повертає значення спеціального типу даних trigger. Це запис, він має ту ж структуру, що й таблиця, яка викликала тригер. Синтаксис тригерної функції має такий вигляд:

        CREATE FUNCTION ім’я_функції() RETURNS trigger AS 

        $$

        DECLARE

        оголошення;

        BEGIN

        команди;

        END;

        $$

        LANGUAGE 'plpgsql';

        У тригерних функціях використовуються спеціальні змінні, які створюються автоматично і містять інформацію про спрацювання тригера. Вони перераховані в таблиці 2.

        Таблиця 2 – Спеціальні змінні тригерних функцій

Ім’я змінної

Тип змінної

Опис

NEW

record

Новий запис бази даних, створений командою INSERT або UPDATE при спрацюванні тригера рівня запису (ROW). Змінна використовується для модифікації нових записів

OLD

record

Старий запис бази даних, який запамятався після виконання команд INSERT або UPDATE при спрацюванні тригера рівня запису (ROW)

TG_NAME

name

Ім’я тригера

TG_WHEN

text

Рядок BEFORE або AFTER, в залежності від момента спрацьовування   тригера, зазначеного у визначенні (до або після операції)

TG_LEVEL

text  

Рядок ROW або STATEMENT, в залежності від рівня тригера, зазначеного у визначенні

TG_OP

text  

Слово INSERT, UPDATE, DELETE або TRUNCATE, в залежності від операції, яка викликала тригер

TG_RELID

oid  

Ідентифікатор об’єкта таблиці, в якій спрацював тригер

TG_RELNAME

name

Ім’я таблиці, в якій спрацював тригер (застаріле).

TG_TABLE_NAME 

name

Ім’я таблиці, в якій спрацював тригер (версія 9.0 Beta)

TG_TABLE_SCHEMA

name

Імя схеми (версія 9.0 Beta)

TG_NARGS

integer

Кількість аргументів тригерної функції, зазначених у визначенні тригера

TG_ARGV[ ]

text

Масив аргументів, зазначених у команді CREATE TRIGGER. Індексація масиву починається з нуля

        Слід наголосити на тому, що функція повинна бути оголошена без аргументів, навіть якщо вона розрахована на отримання аргументів, зазначених у інструкції CREATE TRIGGER. Аргументи тригера, якщо вони є, передаються через масив tg_argv[].




1. 1Определение основного удельного сопротивления вагонного состава 1
2. Диагностика деменции альцгеймеровского типа
3. ГБОУ СПО Технологический колледж 14 или акт проработки
4. ЛАБОРАТОРНАЯ РАБОТА I ИССЛЕДОВАНИЕ НЕСТАЦИОНАРНОГО ПРОЦЕССА ТЕПЛОПРОВОДНОСТИ В БИОЛОГИЧЕСКОЙ ТКАНИ И
5. Colonel to n English regiment of foot in Flnders formerly commnded by the fmous Colonel Lockhrt nd ws killed t the bttle ner Dunkirk ginst the Spnirds
6. Переходный этап в развитии цивилизации на историческом примере Переходный период от неолитической к ра
7. Социологическое и психологическое обеспечение рекламной кампании
8. Захист персональних даних 1
9. 5 Лабораторная работа 7
10. Хагакурэ Цунэтомо Ямамото Хагакурэ http---www
11. Відкрити вогонь по штабах Вогонь по штабах гасло Мао що поклав початок Культурної революції в 1966 році
12. включены в жизнь своей общины и общества в целом
13. кометы реже зажигаются звезды и уж совсем редко что впрочем вполне закономерно загораются сверхзвезд
14. Природные ресурсы мировой экономики 2
15. Реферат- Административное принуждение
16. Экономика Франции
17. варианты ответов на него
18. ДОКЛАД О РЕЗУЛЬТАТАХ И ОСНОВНЫХ НАПРАВЛЕНИЯХ ДЕЯТЕЛЬНОСТИ МИНИСТЕРСТВА ЭНЕРГЕТИКИ РОССИЙСКОЙ ФЕДЕРА
19. ТЕМА 6- СТІЙКІСТЬ РОБОТИ ПРОМИСЛОВИХ ОБ~ЄКТІВ У НАДЗВИЧАЙНИХ СИТУАЦІЯХ 6
20. Акционерное общество как самостоятельная разновидность юридических лиц в Российской Федераци