- •Кафедра «Информационные технологии»
- •Основы языка 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, тем не менее, бывает вполне оправданным,
- •Пример.
Изменения данных, сделанные в курсоре, невидимы другим пользователям до тех пор, пока курсор не будет подтвержден (committed).
21
Последовательный курсор
(forward-only cursor) не разрешает
выполнять выборку данных в
обратном направлении. Пользователь может выбирать
строки данных только от начала к
концу курсора.
22
Последовательный курсор
не хранит набор всех строк.
Строки считываются из БД, как только они выбираются в курсоре. Это позволяет динамически отражать все изменения, вносимые пользователями в БД с помощью команд INSERT, UPDATE, DELETE. В курсоре видно
самое последнее состояние данных.
23
Ключевой курсор или курсор, зависящий от набора ключей (keyset- driven cursor) построен на основе уникальных идентификаторов.
Множество всех уникальных идентификаторов (ключей) строк таблиц БД называется набором ключей. Ключевой курсор - набор ключей, идентифицирующих строки полного результирующего набора курсора.
24
Набор ключей строится в системной БД temdb.
Сервер блокирует строки исходных
таблиц только на время составления
таблицы ключей.
Так как сохраняется информация только о ключевых столбцах строк, включенных в полный результирующий набор курсора, ключевые курсоры
отражают все изменения, вносимые
другими пользователями. |
25 |
Строки, добавленные после открытия
курсора, не будут показаны в курсоре, даже если они удовлетворяют условиям выборки.
Строки, включенные в курсор, но
удаленные другими пользователями, будут показаны как поврежденные (row missing).
26
При работе с курсором можно выделить пять основных операций:
1. Создание курсора
До использования курсора его нужно создать. Это напоминает предварительное объявление переменной перед ее использованием.
27
Объявление курсора определяет:
тип и режим его работы; инструкцию SELECT, поставляющую ему данные.
При объявлении курсора никакие
данные не извлекаются. Курсор SQL-92 объявляется с
помощью инструкции CURSOR FOR:
Единственный случай, когда инструкция DECLARE не
требует амперсанда.
28
Расширенный курсор T-SQL объявляется аналогичным образом:
29
2. Открытие курсора
Сразу после создания курсор не содержит никаких данных. Операция открытия курсора наполняет курсор
данными.
При открытии курсора извлекаются данные, которыми он и заполняется:
30