Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Л-5 - Процедурные расширения SQL

.pdf
Скачиваний:
13
Добавлен:
28.06.2021
Размер:
592.42 Кб
Скачать

Процедурные расширения SQL

Процедурные расширения в СУБД Ключевые элементы процедурных расширений Курсоры

Процедурные и непроцедурные языки

Большинство ЯП – процедурные. Процедурная программа – список последовательных инструкций, указывающих компьютеру, что делать:

задать циклическую обработку;

задать обработку ошибок (программа продолжает работу, сообщив об ошибке пользователю);

передать результат подпрограмме, выполняющей дополнительные вычисления, и т.д.

SQL – непроцедурный язык. Процедурных инструкций

внем нет (нельзя выполнить операции в иерархических логических блоках, итерации, условные блоки и пр.)

Внедренное программирование

Первые реализации СУБД не имели процедурных возможностей. Процедурная обработка осуществлялась с помощью внедренного программирования.

Все основные языки процедурного программирования (С, COBOL, Pascal) имели специальные предваритель-

но скомпилированные расширения, позволяющие внедрять инструкции SQL в текст своих программ.

На этапе предварительной компиляции инструкции

SQL преобразуются в конструкции процедурного языка, которые компилируются в двоичный код.

Процедурные расширения SQL (1)

Усложнение РБД – внедрение в СУБД большого числа методов внутренней обработки данных.

Возникла идея программирования хранимых процедур и хранения их в СУБД в скомпилированном (двоичном) или интерпретируемом виде.

Стандарт ANSI/ISO не давал никаких рекомендаций. Поэтому каждый производитель СУБД реализовал свою версию внутренних программных модулей SQL.

Процедурные расширения SQL (2)

Процедурные расширения:

язык Transact-SQL (Microsoft SQL Server);

PL/SQL (Oracle Database) (альтернативой для написания процедурного кода является Java).

Можно использовать в СУБД языки семейства .NET (C# и VB.NET) для создания хранимых процедур, функций и триггеров, внедряемых в СУБД.

Хотя общий синтаксис процедурных элементов в СУБД аналогичен, каждая из СУБД ввела свои дополнитель-

ные возможности.

Процедурные расширения SQL (3)

Стандарты SQL1999 / SQL:2003 добавили поддержку хранимых модулей (впервые появились в 1996 г.), а также триггеров.

В категорию процедурных модулей SQL попадают также пользовательские функции, а также специальные конструкции (модули), содержащие процедуры, функции и объявления общих переменных.

В Oracle такие модули называют пакетами. Однако они не реализованы в Microsoft SQL Server.

Процедурные расширения SQL (4)

Две наиболее часто используемые формы процедурных расширений – подпрограммы (хранимые процедуры) и

триггеры.

В них реализованы два принципиально отличающихся подхода процедурного программирования: линейный и управляемый событиями.

Пользовательские функции можно рассматривать как частный случай хранимых процедур.

Под модулем (пакетом) понимается набор хранимых процедур и функций, объединенных в один контейнер.

Преимущества и области применения процедурных расширений

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

Основное их назначение:

повышение производительности;

сокращение сетевого трафика;

повышение безопасности данных;

повторное использование программного кода.

Безопасность базы данных

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

ХП – отдельный объект БД со своими привилегиями. У пользователей отзывают права обновления данных в таблице и предоставляют им привилегии на запуск ХП с полномочиями изменять отдельные столбцы таблицы.

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

(INSERT, UPDATE или DELETE), предотвращая их повреждение.

Повторное использование программного кода

После написания и компиляции ХП и пользовательская функция могут быть многократно использованы раз-

ными пользователями или приложениями, сокращая вероятность человеческой ошибки.

Изменение логики постоянного модуля не отразится на вызывающих его клиентских программах (если не будет изменен состав входных параметров).

Если же программный код внедрить непосредственно в клиентские программы, при необходимости изменения логики придется перепрограммировать эти приложения.