Базы данных/Лабораторная работа 4 — различия между версиями
Ivsavin (обсуждение | вклад) (Новая страница: «Цели лабораторной работы: * Знакомство с языком PL/pgSQL * Создание процедур, функций и тригг…») |
Ivsavin (обсуждение | вклад) |
||
Строка 15: | Строка 15: | ||
== Транзакции == | == Транзакции == | ||
+ | == Задания лабораторной работы == | ||
+ | 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" | ||
== Защита лабораторной работы == | == Защита лабораторной работы == | ||
− | * | + | * Показать код созданных триггера, функции и процедуры |
+ | * Продемонстрировать их работу | ||
+ | * По просьбе преподавателя прокомментировать ход выполнения кода. | ||
== Дополнительно == | == Дополнительно == | ||
* http://www.postgresql.org/docs/9.3/static/plpgsql.html | * http://www.postgresql.org/docs/9.3/static/plpgsql.html | ||
* http://www.postgresql.org/docs/9.3/static/tutorial-transactions.html | * http://www.postgresql.org/docs/9.3/static/tutorial-transactions.html | ||
+ | * http://www.postgresql.org/docs/9.3/static/plpython.html - позволяет писать хранимые процедуры на питоне, нужно включить расширение |
Версия 15:44, 18 мая 2016
Цели лабораторной работы:
- Знакомство с языком PL/pgSQL
- Создание процедур, функций и триггеров, обеспечивающих удобство работы с базой и обеспечение целостности
- Использование транзакция для обеспечения целостности
Содержание
Зачем использовать 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"
Защита лабораторной работы
- Показать код созданных триггера, функции и процедуры
- Продемонстрировать их работу
- По просьбе преподавателя прокомментировать ход выполнения кода.
Дополнительно
- http://www.postgresql.org/docs/9.3/static/plpgsql.html
- http://www.postgresql.org/docs/9.3/static/tutorial-transactions.html
- http://www.postgresql.org/docs/9.3/static/plpython.html - позволяет писать хранимые процедуры на питоне, нужно включить расширение