Хранимая процедура – это отдельная программа, написанная на SQL для процедур и триггеров InterBase. Сами процедуры хранятся в базе данных. Хранимые процедуры позволяют вести поиск и обработку данных непосредственно на сервере, обеспечивая максимальную независимость клиентской части приложений. В них могут использоваться любые конструкции SQL для процедур и триггеров InterBase. Они, как обычные программы, могут получать входные параметры и возвращать значения вызвавшим их приложениям. Кроме того, они могут возвращать не только отдельный набор значений – строку, но и множество строк, которое можно рассматривать как виртуальную таблицу.
Хранимая процедура может также вызываться непосредственно из приложения или других хранимых процедур или триггеров. Хранимые процедуры, возвращающие множество строк, можно использовать в команде SELECT на месте таблиц или обзоров.
Использование хранимых процедур дает ряд преимуществ:
¯ Модульность проектирования. Приложения, которые обращаются к одной базе данных, могут совместно использовать хранимые процедуры, устраняя двойной код, уменьшая размер приложений и устраняя потенциальные ошибки.
¯ Локализация изменений. Если процедура модифицируется, то все внесенные изменения автоматически отражаются во всех приложениях, которые используют процедуру, обеспечивая их согласованность. При этом нет необходимости в перетрансляции и перекомпоновке приложений.
¯ Ускорение обработки. Хранимые процедуры выполняются сервером, а не клиентом, что позволяет ускорить обработку запросов и сократить сетевой трафик.
Процедуры по своему назначению разделяются на два вида: выполнимые процедуры и процедуры выбора.
требуются следующие привилегии:
CREATE ROUTINE для создания хранимых процедур
ALTER ROUTINE необходимы для изменения или удаления процедур. Эта привилегия автоматически назначается создателю процедуры (функции)
EXECUTE привилегия потребуется для выполнения подпрограммы.
Хранимые подпрограммы создаются с помощью выражений CREATE PROCEDURE или CREATE FUNCTION. Хранимая подпрограмма вызывается, используя выражение CALL , причем только возвращающие значение переменные используются в качестве выходных. Функция может быть вызвана подобно любой другой функции и может возвращать скалярную величину. Хранимые подпрограммы могут вызывать другие хранимые подпрограммы.
CREATE FUNCTION имя_функции ([параметр_функции[,...]])
RETURNS тип
[характеристика ...] тело_подпрограммы
параметр_процедуры:
[ IN | OUT | INOUT ] имя_параметра тип
параметр_функции:
имя_параметра тип
тип:
Любой тип данных MySQL
характеристика:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
тело_подпрограммы:
Правильное SQL выражение.
39. Работа с BLOB и функции, определенные пользователем.
BLOB – (большой двоичный объект) предназначен для хранения данных произвольного формата переменной длины, и, как правило, значительного размера. BLOB представляет собой тип данных с динамически изменяемым размером, для этого типа не указываются ни размеры, ни способ кодирования. Внутри таблиц вместо данных BLOB записываются их уникальные дескрипторы (указатели) фиксированного размера на место их фактического хранения. Доступ к дескрипторам данным BLOB в InterBase осуществляется также, как к данным, хранимым в других форматах. Кроме того, InterBase хранит данные BLOB внутри базы.
Прежде чем сохранить элементы типа BLOB в базе данных, эти элементы создаются как файлы определенной структуры:
· Растровые или векторно-графические файлы;
· Звуковые файлы;
· Интерактивные аудио-видео файлы;
· Текстовые файлы
· Файлы CAD.
InterBase хранит данные BLOB используя метод сегментации. Использовать дисковое пространство для хранения каждого BLOB в одном непрерывном участке из-за возможных изменений длин объектов было бы неэффективно, поскольку их перезапись потребовала бы либо перемещения всех BLOB, либо привела бы к возникновению дыр, устранение которых также требует периодической реорганизации базы. Вместо этого, InterBase хранит каждый BLOB в сегментах, которые индексируются дескриптором, генерируемом InterBase, когда создается BLOB. Этот дескриптор называется идентификатором BLOB (BLOB ID) и представляет собой учетверенное слово, содержащее уникальную комбинацию идентификатора таблицы и идентификатора BLOB.
· Работа с BLOB осуществляется на базовом языке. Доступ реализуется одним из трех способов:
· 1)С использованием специально включаемого в программу SQL-текста. В этом случае программа перед ее компиляцией обрабатывается специальным препроцессором. Для InterBase таковым является утилита GPRE. В результате ее работы этот текст транслируется в последовательность вызовов функций API. Поскольку аналогичные методы используются и другими СУБД, то это создает возможность с минимальными потерями переходить от работы с одной базы на другую.
· 2)Предполагается прямой вызов функций API. В этом случае программа оказывается явно привязанной к платформе InterBase, но не требует предварительной препроцессорной обработки. Наиболее выгоден при написании стандартных функций.
· 3)Использование средств доступа высокого уровня. Для большинства приложений данный способ является предпочтительным, поскольку позволяет абстрагироваться от деталей процедур чтения и записи и сосредоточиться только на содержательной части задачи, сохраняя при этом высокую эффективность обработки данных.
· Пример 1. Изменить структуру таблицы STUDENT, добавив к ней столбец RESUME типа BLOB.
· ALTER TABLE student
· ADD resume BLOB SUB_TYPE 0 SEGMENT SIZE 80;
· Пользовательские функции (UDF) – это программы на базовом языке для выполнения в приложениях, часто используемых при работе с базой данных задач. UDF помогают обеспечить модульность приложений, выделяя их в отдельные модули многократного использования.
· К UDF можно обращаться из программ на базовом языке, а также из хранимых процедур и триггеров.
· Пользовательские функции не являются частью базы. Они помещаются в отдельную библиотеку (DLL), находящуюся на той же машине, что и база данных. Чтобы сделать функции доступными в базе, их надо в ней объявить. После этого, обращение к ним осуществляется точно так же, как к стандартным функциям InterBase. Вызов этих функций может производится везде, где синтаксисом SQL предусмотрено использование выражений.
BDE представляет собой набор динамических библиотек, функции которых позволяют не только обращаться к данным, но и эффективно управлять ими на стороне приложения.
В состав BDE входят следующие функциональные системы:
- администратор системных ресурсов (управляет процессом подключения к данным, при необходимости устанавливает нужные драйверы, а при завершение работы автоматически освобождает занятые ресурсы.).
-система обработки запросов (обеспечивает выполнение запросов под приложение к любым БД, для которых установлен драйвер)
-система сортировки (является запатентованной технологией и обеспечивает очень быстрый поиск по запросам SQL и через стандартные драйверы)
-система пакетной обработки (представляет собой механизм преобразования данных из одного формата в другой при выполнении операций над целыми таблицами)
-менеджер буфера (управляет единой для всех драйверов буферной областью памяти, которую одновременно могут использовать несколько драйверов, это позволяет существенно экономить системные ресурсы)
-менеджер памяти (взаимодействует с Оси обеспечивает эффективное использование выделяемой памяти, ускоряет работу драйвера, которые для получения небольших фрагментов памяти обращаются к нему, а не к ОС). Менеджер памяти выделяет большие объемы ОП и затем распределяет ее небольшими частями между драйверами согласно их потребностям.
-транслятор данных (обеспечивает преобразование форматов данных для различных типов БД)
-кэш BLOB (используется для ускорения работы с данными в формате BLOB)
-SQL генератор (транслирует запросы из формата QBEв формат SQL)
-система поддержки драйверов SQL (повышает эффективность механизма поиска при выполнении запросов SQL)