|
Программирование >> Реализация баз данных
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 появится сообщение об завершении команды, курсор освобожден.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |