- •Кафедра «Информационные технологии»
- •Основы языка Transact-SQL
- •11. Курсоры
- •Курсор позволяет клиентским
- •Набор всех данных, имеющихся в таблице, называется полным набором
- •Курсоры работают с
- •«Недостатки» курсоров:
- •В SQL Server поддерживается несколько видов курсоров.
- •• Курсоры сервера (API Server Cursors) – действуют на сервере и
- •• Курсоры клиента (Client cursors)
- •Один курсор может основываться на нескольких таблицах, расположенных как в одной, так и
- •Если за одну операцию курсор позволяет выбрать несколько строк данных, то такой курсор
- •Последовательные курсоры -
- •Серия последовательных выборок из курсора называется
- •Типы и поведение курсоров
- •Статический курсор (static cursor, другое название – курсор моментального снимка, snapshot cursor).
- •В результате статический курсор не изменяется после создания и
- •Внесение изменений в статические курсоры невозможно, так как нет гарантии в существовании и
- •Динамический курсор (dynamic cursor) в определенном смысле противоположен статическому.
- •Все изменения, вносимые пользователями в полный результирующий набор курсора, будут видны в курсоре
- •Изменения данных, сделанные в курсоре, невидимы другим пользователям до тех пор, пока курсор
- •Последовательный курсор
- •Последовательный курсор
- •Ключевой курсор или курсор, зависящий от набора ключей (keyset- driven cursor) построен на
- •Набор ключей строится в системной БД temdb.
- •Строки, добавленные после открытия
- •При работе с курсором можно выделить пять основных операций:
- •Объявление курсора определяет:
- •Расширенный курсор T-SQL объявляется аналогичным образом:
- •2. Открытие курсора
- •3. Выборка из курсора и
- •Курсор перемещается к следующей строке и заполняет значениями ее столбцов локальные переменные (эти
- •По умолчанию команда FETCH перемещает курсор к следующей строке (направление NEXT).
- •Смещение курсора относительно текущей позиции – проблема:
- •4. Закрытие курсора
- •Закрытие курсора снимает
- •5. Освобождение курсора
- •Особенность: оператор DEALLOCATE удаляет идентификатор или
- •Примеры использования курсоров
- •После освобождения курсора
- •Работа со строками с помощью курсора
- •Пример
- •Команда FETCH может не только
- •Перед выполнением команды
- •Пример 3
- •В примерах 2, 3 оператор FETCH
- •Ключевые слова оператора FETCH:
- •Пример
- •Модификация и удаление строк
- •T-SQL также поддерживает
- •Пример 5
- •12. Управляющие конструкции Transact-SQL
- •Блоки BEGIN…END могут быть
- •К ним относятся команды резервного
- •IF…ELSE
- •Аргумент Boolean_expression
- •Если возвращается значение TRUE, то выполняется первая команда
- •В отличие от большинства языков программирования, в конструкции IF…ELSE языка Transact-SQL:
- •Если требуется выполнить более
- •CASE…END
- •Аргументы:
- •Если аргументы when_expression и input_expression совпадают, то конструкция CASE…END возвращает значение result_expression.
- •Примеры использования конструкции CASE…END
- •COALESCE
- •Например:
- •WHILE…BREAK & CONTINUNUE
- •Аргумент Boolean_expression задает логическое условие, при истинности которого выполняется следующая за ним команда
- •Цикл можно принудительно остановить, если в теле цикла выполнить команду BREAK.
- •Пример 1.
- •Пример 2.
- •Пример 3.
- •GOTO
- •В SQL Server метки являются
- •Код «спагетти»
- •Применение команды GOTO, тем не менее, бывает вполне оправданным,
- •Пример.
Кафедра «Информационные технологии»
Базы данных
Курс лекций по дисциплине «Базы данных»
для специальности направления 1-40 01 02 01 «Информационные системы и
технологии (в проектировании и производстве)»
автор-составитель
Е.Г. Стародубцев, доцент, канд. физ.-мат. наук
Основы языка Transact-SQL
Лекция 4
11.Курсоры
12.Управляющие конструкции Transact-SQL
2
11. Курсоры
SQL Server способен возвращать после выполнения запросов результаты, содержащие сотни тысяч строк. Клиентские приложения не всегда «справляются» с таким объемом данных (для их хранения нужно много памяти).
Решением этой проблемы является использование курсоров. Курсоры представляют собой механизм обмена
данными между сервером и клиентом3 .
Курсор позволяет клиентским
приложениям работать не с полным набором данных (всеми строками и столбцами источника данных), а лишь
с одной или несколькими строками
(и/или столбцами).
Курсор можно рассматривать как «окно», накладываемое на весь набор
данных. Пользователь одновременно
видит только часть данных, но, перемещая «окно», может получить доступ ко всем данным источника4 .
Набор всех данных, имеющихся в таблице, называется полным набором
строк.
Набор строк, возвращаемый
командой SELECT, называется
результирующим набором и является частью полного набора, отфильтрованного горизонтально (с помощью инструкции WHERE) или вертикально (не включая в запрос некоторые столбцы таблицы)5 .
Курсоры работают с
результирующим набором данных, расширяя возможности пользователей по их обработке.
(!) По возможности,
рекомендуется избегать использования курсоров и работать со стандартными командами обработки данных: SELECT, UPDATE, DELETE, INSERT6 .
«Недостатки» курсоров:
•не позволяют проводить операции изменения над всем объемом данных,
•скорость выполнения операций
обработки данных с помощью курсоров значительно ниже, чем у стандартных средств SQL Server.
Но в некоторых случаях необходимо
использование курсоров.
7
В SQL Server поддерживается несколько видов курсоров.
• Курсоры Transact-SQL –
применяются в основном внутри триггеров, хранимых процедур и сценариев Transact-SQL. Для создания
таких курсоров используется команда
DECLARE CURSOR. Управление
такими курсорами осуществляется средствами Transact-SQL.
8
• Курсоры сервера (API Server Cursors) – действуют на сервере и
реализуют программный интерфейс
приложений для ODBC, OLE DB, DB- Library.
Клиент посылает с помощью API запрос на выполнение одной из доступных операций курсора.
Запрос обрабатывается соответствующим интерфейсом API сервера и затем выполняется9 .
• Курсоры клиента (Client cursors)
– реализуются на клиентском приложении; выбирают весь результирующий набор строк и
сохраняют его локально.
Это позволяет ускорить операции обработки данных, так как снижаются потери времени на выполнение сетевых операций.
10