Базы данных/Лабораторная работа 4

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Цели лабораторной работы:

  • Знакомство с языком PL/pgSQL
  • Создание процедур, функций и триггеров, обеспечивающих удобство работы с базой и обеспечение целостности
  • Использование транзакция для обеспечения целостности

Зачем использовать PL/pgSQL

PL/pgSQL - процедурный язык программирования, позволяющий выполнять несложные скрипты. Язык PL/pgSQL является расширенной версией стандарта языка PL/SQL. В PostgreSQL есть также возможность расширить синтаксис встроенного языка за счет интерпретаторов популярных языков: Python, Perl, Java, Lua, R и тд.

Основное преимущество использования PL/pgSQL состоит в том, что скрипты выполняются непосредственно на сервере СУБД в отличии от любых типов взаимодействия, которые предполагают, что скрипт выполняется на стороне клиента, лишь через драйвер взаимодействуя с сервером, передавая ему запросы и получая ответы. Таким образом, PL/pgSQL востребован для операций с интенсивным вводом/выводом информации.

К наиболее типичным задачам, реализуемым на PL/SQL относятся:

  • Выполнение и контроль целостности операций с высокими требованиями к скорости исполнения (например, финансовые операции, событиями систем мониторинга)
  • Аудит изменения данных: созранение истории изменения значений кортежей наиболее важных отношений в системе.
  • Генерация разовых периодических отчетов, в которых аналитируется большой объем данных (для экономии времени пересылки данных между клиентом и сервером).

Также к преимуществам использования PL/SQL является использование одного языка программирования для выполнения запросов и для выполнения инструкций.

Как правило, язык PL/pgSQL не используют в задачах, где некритичны его преимущества из-за относительно сложного процесса поддержки и нагрузки на сервер СУБД.

Процедуры и функции

Отличие процедур и функций состоит лишь в том, что процедуры не возвращают никаких значений, в отличии от функций. И процедуры и функции могут принимать входные параметры.

Определение переменных

Управляющие конструкции

Использование курсоров

Логирование и обработка ошибок

Триггеры

Транзакции

Задания лабораторной работы

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

2. Создать функцию с входным параметром - имя актера. Если актер с таким именем не найден, функция должна вернуть 0. Если найден, то вычислить через person_info birth date (info_type_id=21) и death date (info_type_id=23) возраст актера. Если актер еще не умер, то вычислить, сколько сейчас лет. Функция должна вернуть целое число прожитых лет.

3. Используя функцию, созданную ранее, создайте процедуру, которая по имени актера выводит в лог текст следующего содержания:

 Name: ...
 Nicknames: nickname1, nickname2, ... строка выводится только если у человека есть клички, выводятся все клички через запятую
 Age: ... вычисляется из функции
 First appear: ... фильм и год выхода, в котором актер впервые снялся.

Если актер не найден или не удалось определить его первую роль, то процедура должна завершиться с ошибкой и вывести в лог "Invalid data"

Защита лабораторной работы

  • Показать код созданных триггера, функции и процедуры
  • Продемонстрировать их работу
  • По просьбе преподавателя прокомментировать ход выполнения кода.

Дополнительно