Прежде чем создать UDF инструкцией CREATE FUNCTION, необходимо определить следующие характеристики:
- имя UDF,
- схема (квалификатор),
- число и типы данных входных параметров,
- типы возвращаемых значений.
Для изменения функции используется инструкция ALTER FUNCTION, для удаления – DROP FUNCTION.
Нельзя использовать оператор ALTER FUNCTION для преобразования типов функций.
Типы операторов, которые могут использоваться в функции:
- Оператор DECLARE.
- Присвоение значений объектам, локальным относительно функции, с помощью опции SET или SELECT.
- Операторы управления (например, IF..ELSE, WHILE, RETURN, GOTO, BREAK и CONTINUE).
- Оператор SELECT, содержащий список выбора с выражениями, которые присваивают значения локальным переменным функции.
- Операторы UPDATE, INSERT и DELETE.
- Операторы EXECUTE, для вызова хранимых процедур.
Хранимые процедуры не могут возвращать результирующие наборы клиенту. Если хранимая процедура возвращает результирующий набор, выполнение вызывающей функции прерывается.
Понятие курсора
Курсор в SQL – это область в памяти БД, которая предназначена для хранения результата оператора выборки SQL. Указанная область в памяти поименована и доступна для прикладных программ.
В каждый момент времени прикладной программой может быть проверена одна строка курсора. Курсоры часто применяются в операторах, встроенных в написанные на языках процедурного типа прикладные программы.
В соответствии со стандартом SQL при работе с курсорами можно выделить следующие основные действия:
· создание или объявление курсора;
· открытие курсора, т.е. наполнение его данными, которые сохраняются в памяти;
· выборка из курсора и изменение с его помощью строк данных;
· закрытие курсора, после чего он становится недоступным для пользовательских программ;
· освобождение курсора, т.е. удаление курсора как объекта, поскольку его закрытие необязательно освобождает ассоциированную с ним память.
Недостатки:
- не позволяют проводить операции изменения над всем объемом данных;
- скорость выполнения операций обработки данных посредством курсора заметно ниже, чем у стандартных средств SQL.
Таким образом, при манипулировании данными следует избегать работы с курсорами и использовать командами обработки данных: UPDATE, INSERT, DELETE.
Курсоры делятся на две категории: последовательные и прокручиваемые. Последовательные позволяют выбирать данные только в одном направлении – от начала к концу. Прокручиваемые же курсоры предоставляют большую свободу действий – допускается перемещение в обоих направлениях и переход к произвольной строке результирующего набора курсора.
SQL Server поддерживает курсоры статические, динамические, быстрые последовательные и управляемые набором ключей (ключевые курсоры).
9.
Понятие транзакции
Определение. Транзакция - это последовательность операторов манипулирования данными, выполняющаяся как единое целое (все или ничего) и переводящая базу данных из одного целостного состояния в другое целостное состояние.
Транзакция обладает четырьмя важными свойствами, известными как свойства АСИД:
- (А) Атомарность. Транзакция выполняется как одна операция - либо выполняется вся транзакция целиком, либо она целиком не выполняется.
- (С) Согласованность. Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное) состояние. Внутри транзакции согласованность базы данных может нарушаться.
- (И) Изоляция. Транзакции разных пользователей не должны мешать друг другу (например, как если бы они выполнялись строго по очереди).
- (Д) Долговечность (устойчивость). Если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системы.
Транзакция обычно начинается автоматически с момента выполнения запроса и продолжается до тех пор, пока не произойдет одно из следующих событий:
- Подана команда COMMIT (зафиксировать транзакцию).
- Подана команда ROLLBACK TRANSACTION (откатить транзакцию).
- Произошло отсоединение пользователя от СУБД.
- Произошел сбой системы.
Одним из способов поддержки транзакций является ведение журнала. Журнал транзакций — это структура данных, в которой хранятся записи о планирующихся и выполненных операциях. Работа с ним состоит из трёх шагов:
1. Записать намерение произвести некоторые операции
2. Запись о выполнении задания
3. Записать об отсутствии ошибок
Вложенные транзакции
Свойство Д (долговечность) также не является абсолютными свойством, т.к. некоторые системы допускают вложенные транзакции. Если транзакция Б запущена внутри транзакции А, и для транзакции Б выполнена команда COMMIT, то фиксация данных транзакции Б является условной, т.к. внешняя транзакция А может откатиться. Результаты работы внутренней транзакции Б будут окончательно зафиксированы только если будет зафиксирована внешняя транзакция А.
Вложенными называются транзакции, выполнение которых инициируется из тела уже активной транзакции.
Для создания вложенной транзакции не нужны какие-либо дополнительные команды. Новая транзакция начинается с открытой предыдущей. Завершение транзакции верхнего уровня откладывается до завершения вложенных транзакций. Если транзакция самого нижнего (вложенного) уровня завершена неудачно и отменена, то все транзакции верхнего уровня, включая транзакцию первого уровня, будут отменены.