Л
абораторная работа №8
Тема: Объектно-ориентированный подход в
создании БД с
использованием объектно-реляционной СУБД PostgreSQL.
Цель: моделирование объектного подхода на реляционной БД.
Навыки и умения: написание хранимых процедур на языке PL/pgSQL,
создание представлений, написание триггеров и триггерных функций,
написание агрегатных функций.
Теоретический базис
Создание агрегатных функций
СУБД PostgreSQL позволяет создавать собственные агрегатные
функции для применения их в запросах группировки. Для определения новой
агрегатной
функции в базе данных служит конструкция CREATE
AGGREGATE. Синтаксис конструкции следующий:
CREATE AGGREGATE имя ( BASETYPE = входной_тип
[ , SFUNC - функция. STYPE = переходный_тип ]
[ , FINALFUNC - завершающая_функция ]
[ , INITCOND - начальное_состояние ] )
Расшифровка параметров:
• имя. Имя создаваемой агрегатной функции;
• входной_тпип. Тип входных данных, с которыми работает
создаваемая функция. Если агрегатная
функция игнорирует
входные данные (как, например, функция count()), вместо типа
данных указывается строковая константа ANY;
• функция. Имя функции, вызываемой для обработки всех входных
данных, отличных от NULL. Обычно такая функция получает два
аргумента: первый аргумент относится к типу данных
переходный_тип, а второй — к типу данных входной_тип. Если
агрегатная
функция не анализирует входные данные, она
получает только один аргумент типа переходный_тип. Так или
иначе,
функция
должна
возвращать
значение
типа
переходный_тип;
• переходный_тип. Промежуточный тип данных агрегатной
функции;
• заверштощая_функция. Имя итоговой функции, вызываемой для
вычисления результата агрегатной функции после обработки всех
входных данных.
Функция должна получать один аргумент типа
переходный_тип. Выходной тип данных агрегатной функции
определяется типом возвращаемого значения этой функции. Если
параметр FINALFUNC не указан, то последнее переходное
значение передается в качестве результата агрегатной функции, а
выходной тип данных определяется типом переходный_тип;
• начальное_состояние. Начальное состояние промежуточного
значения агрегатной функции. Задастся литералом типа
переходный_тип. Если параметр начальное_состояние не задай,
промежуточное значение инициализируется псевдозначением
NULL.
Агрегатные функции характеризуются в первую очередь типом
входных данных. Допускается существование двух и более агрегатных
функции с одинаковыми именами, вызываемых с разными тинами данных
(это называется перегрузкой функций).
Пример 8.1:
В
следующем примере определяется агрегатная функция sum(),
работающая с текстовыми данными. Она вызывает встроенную функцию
PostgreSQL – textcat(text, text) для конкатенации всего текста во входных
данных:
Достарыңызбен бөлісу: