Программирование >>  Реализация баз данных 

1 ... 73 74 75 [ 76 ] 77 78 79 ... 162


220 Управление ирован 1е данными Глава 7

Клиентские курсоры ibrar;, были реализованы раньше, чем SQ rver стал поддерживать серверные курсоры. В ODBC клиентские курсоры реализованы с ()иблио]еки ODBC Cursor Library, предназначенной для использования с драйверами ODBC, которые поддерживают для курсора лишь параметры по умолча-

нию. Поскольку как DB-Library, так и драйвер ODBC SQL Server полностью поддерживает операции с курсорами посредством серверных курсоров, использование клиентских курсоров следует ограничивать.

Клиентские курсоры рекомендуется применять, только чтобы частично обойти огра-связанные с тем, что серверные курсоры поддерживают не все операторы Transact-SQL и пакеты. Если необходим статический перемещаемый курсор для оператора Transact-SQL или пакета, нельзя реализовать с помошью серверною курсора, подумать об использовании клиентского курсора.

Выборка и перемещение

Операция извлечения строки сора называется выборкой. При работе с курсорами Transact-SQL с FETCH удается извлекать строки из результирую-

щего набора курсора.

Оператор FETCH поддерживаем чр параметров для извлечения определенных строк:

* FETCH FIRST - производит выборку первой строки курсора;

FETCH NEXT - производит выборку строки, слсд>1и1цей за последней выбранной строкой;

* FETCH PRIOR - производит вы()орку строки, расположенной перед последней выбранной строкой;

* FETCH LAST - производит выборку последней строки курсора;

FETCH ABSOLUTE я - если п - положительное целое число, производит выборку л-й строки, считая от первой строки курсора. Если - отрицательное целое число, выполняет выборку строки, расположенной за п строк до конца курсора, а если то выборка строк не осуществляется;

FETCH RELATIVE я - производит выборку строки, расположенной через п строк после последней выбранной строки. Если п положительно, то будет выбрана строка, расположенная через п строк после последней выбранной строки; если п отрицательно, то выбирается строка за п строк перед последней выбранной строкой. Если - О, то вновь выбирается та же строка.

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

При открытии логическая позиция курсора установлена перед первой строкой.

У курсоров Transact-SQL имеется ограничение: они выбирают только по одной строке за раз. Серверные курсоры API поддерживают выборку блока строк в одной операции выборки. Курсор, который поддерживает нескольких строк одновременно, называется блочным. Более подробно об извлечении данных из курсора - в SQL Server Books Online.

Управление поведением курсора

Разработаны две модели управления поведением курсора.

Тип ров. API баз данных обычно задают поведение курсоров, подразделяя их на четыре типа: однонаправленные, статические (иногда их также называют моментальными снимками или нечувствительными курсорами), управляемые набором ключей и динамические.



Блокировка курсора

В SQL Server к оператору SELECT из определения курсора применяются те же правила блокировки что и к любому другому оператору SELECT. Однако в курсорах

дополнительна aeroi установить набор блокировок перемещения в зависимости от уровня параллелизма курсора.

Блокировки оператора SELECT, в том числе оператора SELECT из определения курсора, управляются следующими параметрами:

уровнем изоляции шкции, установленным для соединения;

любыми условиями блокировки, заданными укпии FROM.

Эти блокировки удерживаются шении текущей транзакции как для курсоров, так и для независимых операторов SELECT. Когда SQL Server работает в режиме автоматической фиксации, каждый отдельный оператор является транзакцией, поэтому блокировки освобождаются после завершения оператора. Если SQL Server работает в режиме явных или неявных то блокировки удерживаются до фиксации или отката

транзакции.

Транзакции и блокировки подробно обсуждаются в главе 12.

Упражнение 3. Создание курсора для извлечения данных

В этом упражнении вы объявите и заполните курсор Transaci-SQL, выполните извлечение строк из его резу.тыируюшм набора, после чего закроете и освободите курсор. Чтобы выполнить это упражнение, необходимо зарегистрироваться в. качестве администратора на компьютере под управлением Windows 2000 Server.

► Объявление курсора с помощью оператора DECLARE CURSOR лнение его с помощью оператора OPEN

Откройте Query Analyzer и подключитесь к локальному серверу. 2. На панели Editor в окне Query введите следующий код Transact-SQL:

Поведение курсора. Стандарт SQL-92 определяет для оператора DECLARECLR??OR ключевые слова SCROLL и INSENSITIVE, которые задают поведение курсора. Некоторые API баз данных также поддерживают определение поведения курсора в терминах чувствительности и

ADO и DB-Library поддерживают лишь определение типов но не их поведе-

ния, ODBC поддерживает управление курсором как с помощью типа так и опре-

деления поведение 1те;гь(;ости и возможности иеремсшсиия).

До SQL Server 7.0 оператор DECLARE CURSOR использовался только для определения курсоров Transact-SQL, поддерживающих определение поведения с помощью ключевых слов SCROLL и INSENSITIVE. В SQL Server 7.0 оператор DECLARE CURSOR дополнен поддержкой ключевых слов для определения типа курсора.

Модель поведения курсора в OLE DB отличается как от типов, так и от других моделей поведения курсора.

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

нибудь одно. Поскольку курсоры ODBC и Transact-SQL поддерживают определение и поведения, и типа курсора, при определении курсора следует применить ODBC или SQL. В спецификации ODBC сказано, что одновременное определение поведения и типа курсора может привести к непредсказуемым результатам.



22 №ра1Ьюяие ировзнле данными Глава

USE BookShopDB . --

DECLARE CustomerCrs CURSOR FOR .

SELECT * FROM Customers .

WHERE City = Seattle .

ORDER BY LastName, FirstName . .

Этот оператор объявляет курсор CustomerCrs, который связан с оператором SELECT, извлекающим из таблицы Customers сведения обо всех покупателях, живущих в Сиэтле.

3. Исполните оператор Transact-SQL.

На вкладке Messages панели Results pane отобразится сообщение об успешном завершении команды.

4. На панели Editor н окне Quer дадите следующую команду: OPEN CustomerCrs

Этот оператор заполняет курсор результирующим набором оператора SELECT, заданного при объявлении курсора.

5. Исполните оператор OPEN.

На вкладке Messages панели Results pane выводится сообщение об успешном заверще-нии команды.

► Извлечение из курсора строки с помощью оператора FETCH

[. На панели Editor в окне Query введите следующий код Transact-SQL:

FETCH NEXT FROM CustomerCrs ,

Этот оператор извлекает следующую строку из результирующего набора. Поскольку эт аиия извлечения - первая в сеансе щается первая строка результирующего набора.

2. Исполните оператор Transact-SQL.

На вкладке Grids панели Results отображается первая строка результирующего набора.

3. Исполните оператор еще раз.

На вкладке Grids панели Results выводится вторая строка результирующего набора.

► Ка ыть курсор с помощью зтора CLOSE и освободить его щью оператора DEALLOCATE

1. Введите на панели Editor в окне Query и исполните следующий оператор Transact-SQE:

CLOSE CustonierCrs . -

На вкладке Messages панели Results выводится сообщение об успешном завершении команды. Теперь курсор закрыт.

2. Введите и исполните следующий оператор Transact-SQL: . DEALLOCATE CustomerCrs

На вкладке Messages панели Results появится сообщение об завершении

команды, курсор освобожден.



1 ... 73 74 75 [ 76 ] 77 78 79 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика