Лабораторные работы по курсу «Базы данных»



Pdf көрінісі
бет34/46
Дата12.05.2023
өлшемі0,79 Mb.
#92097
түріПрактикум
1   ...   30   31   32   33   34   35   36   37   ...   46
Байланысты:
2-3 лаб

Пример 6.8: 
Создание отношение с автоматически увеличивающимся полем 
(последовательность необходимо создать заранее): 
CREATE TABLE shipments (id integer DEFAULT 
nextval('shipments_ship_id_seq’) PRIMARY KEY,
customer_id integer, isbn text. ship_date timestamp); 
Простая установка ограничения DEFAULT не гарантирует его 
применения. Пользователь способен вручную задать любое значение, что 
может привести к потенциальному нарушению уникальности в будущем. Для 
предотвращения конфликтов можно воспользоваться триггером. 
2) Триггеры 
Довольно часто перед некоторыми событиями SQL или после них 
должны выполняться определенные операции — например, проверка 
логической 
целостности 
данных. 
В PostgreSQL поддерживаются 
нестандартные расширения, называемые триггерами (trigger) и упрощающие 
взаимодействие приложения с базой данных. Триггер определяет функцию, 
которая должна выполняться до или после некоторой операции с базой 
данных. Триггеры реализуются на языке С, PL/pgSQL или любом другом 
функциональном языке (кроме SQL), который может использоваться в 
PostgreSQL для определения функций. 
Триггер создается на основе существующей функции. Триггеры могут 
вызывать функции, написанные на любом языке, но за одним исключением: 
функция не может быть полностью реализована на SQL. 
Синтаксис определения триггера выглядит так: 
CREATE TRIGGER триггер { BEFORE | AFTER } { событие [ OR 
событие ] } ON таблица
FOR EACH { ROW | STATEMENT }
EXECUTE PROCEDURE функция ( аргументы ) 
Ниже приводятся краткие описания компонентов этого определения.
• CREATE TRIGGER триггер. В аргументе триггер указывается 
произвольное имя создаваемого триггера. Имя может совпадать с именем 
триггера, уже существующего в базе данных — при условии, что этот 
триггер установлен для другой таблицы. 
• { BEFORE | AFTER }. Ключевое слово BEFORE означает, чт.о 
функция должна выполняться перед попыткой выполнения операции, 
включая все встроенные проверки ограничений данных, реализуемые при 
выполнении команд INSERT и DELETE. Ключевое слово AFTER означает, 
что функция вызывается после завершения операции. 
• { событие [ OR событие ... ] }. События SQL, поддерживаемые в 
PostgreSQL. При перечислении нескольких событий в качестве разделителя 
используется ключевое слово OR.


• ON таблица. Имя таблицы, модификация которой заданным событием 
приводит к срабатыванию триггера. 
• FOR EACH { ROW | STATEMENT }. Ключевое слово, следующее за 
конструкцией FOR EACH и определяющее количество вызовов функции при 
наступлении указанного события. Ключевое слово ROW означает, что 
функция вызывается для каждой модифицируемой записи. Если функция 
должна вызываться всего один раз для всей команды, используется ключевое 
слово STATEMENT.
• EXECUTE PROCEDURE функция (аргументы). Имя вызываемой 
функции аргументами. 
Механизм ограничений PostgreSQL позволяет реализовать простое 
сравнение данных со статическими значениями, но иногда проверка входных 
данных должна производиться по более сложным критериям. Это типичный 
пример ситуации, в которой удобно воспользоваться триггером. 
Пример 6.9: 
Создание триггера. Срабатывает при попытке вставить или обновить 
данные в таблицу shipments и приводит к выполнению функции 
check_shipment_addition(): 


Достарыңызбен бөлісу:
1   ...   30   31   32   33   34   35   36   37   ...   46




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет