Обработка результатов запросов. Подпрограммы в Transact-SQL (Лабораторная работа № 4), страница 6

update имя_таблицы set {столбец = {выражение | default | null}} [,…n]

           where current of имя_курсора

и

update [from] имя_таблицы

           where current of имя_курсора

Конструкция currentof имя_курсора однозначно идентифицирует строку, в которой производятся изменение.

2.2.4.5. Закрытие и удалене курсора

Закрытие и удаление курсора выполняются соответственно с помощью операторов:

close [global] имя_курсора

и

deallocate[global] имя_курсора

Параметр global имеет тот же смысл, что и в операторах declarecursor и fetch.

2.2.5. Курсорные переменные

Как и любой язык высокого уровня, Transact-SQL поддерживает переменные. Каждая переменная имеет тип (см. описание лабораторной работы №2). Среди прочих имеется специальный тип – cursor.

Курсорная переменная – это, по существу, абстрактный указатель, которому позже может быть сопоставлен конкретный курсор, конкретный набор данных. Курсорная переменная объявляется так:

declare@имя_курсорной_переменнойcursor

Типичный пример использования курсорной переменной – передача курсора в качестве параметра некоторой процедуре или функции. Бывает, что при передаче параметров процедуре переменная не ссылается на какой-либо конкретный курсор: динамическое создание курсора выполняется в теле процедуры, после чего курсор возвращается из процедуры для дальнейшего использования. Напомним, что при задании курсорной переменной как выходного параметра после описания типа данных cursor указывается ключевое слово varying.

Курсорная переменная может использоваться в операторах open, fetch, close, deallocate.

2.2.6. Функции для работы с курсорами

При работе с курсорами полезно использовать функции, описанные в табл. 1.

Таблица 1 – Функции для работы с курсорами

Название

Описание

@@cursor_rows

Возвращает целое число, свидетельствующее о количестве строк в курсоре, открытом последним вызовом open.

Если возвращается значение 0, это может означать, что курсор не был открыт.

Значение -1 свидетельствует о том, что открытый курсор – динамический.

Значение, меньшее –1 – взятое со знаком «минус» количество строк в ключевом курсоре.

@@fetch_status

Возвращает код результата выполнения последнего вызова fetch:

0 – команда была выполнена успешно, т. е. строка была считана;

-1 – осуществлена попытка выхода за пределы набора данных;

-2 – произошла ошибка доступа к данным; частный случай – переход к «поврежденной» строке в ключевом курсоре.


Продолжение таблицы 1

cursor_status (
 { 'local' , 'имя_курсора' }
 | { 'global' , ' имя_курсора ' }
 | { 'variable' , ' имя_курсора ' }
 )

Позволяет узнать состояние курсора:

1 – курсор содержит минимум одну строку (динамический курсор не может содержать строк);

0 – курсор открыт, но не содержит строк;

-1 – курсор не открыт;

-2 – курсор не может использоваться по каким-то причинам;

-3 – курсор не найден

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

‘local’ и ‘global’ указывают тип курсора – локальный или глобальный.

‘variable’ указывает на то, что второй параметр – курсорная переменная.

3. Порядок выполнения работы

1. Изучить теоретическую часть и литературные источники в части создания подпрограмм и использования курсоров в Transact-SQL.

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

3. Реализовать процедуры и функции.

4. Проверить работоспособность процедур и функций.

5. Продемонстрировать преподавателю все подпрограммы в действии.

4. Литература

1. Мамаев Е. В. Microsoft ® SQL Server 2000. – СПб.: БХВ-Петербург, 2004. – 1280 с.: ил.