- •Кафедра «Информационные технологии»
- •Основы языка 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, тем не менее, бывает вполне оправданным,
- •Пример.
3. Выборка из курсора и
изменение строк данных с помощью курсора.
После того, как в курсор занесены
данные, можно приступать к их
использованию. В зависимости от того,
какой тип курсора был объявлен при его создании, можно выполнять либо
только чтение, либо чтение и изменение данных.
31
Курсор перемещается к следующей строке и заполняет значениями ее столбцов локальные переменные (эти переменные должны быть
изначально объявлены):
32
По умолчанию команда FETCH перемещает курсор к следующей строке (направление NEXT).
Также можно переместить курсор:
•к предыдущей (PRIOR), первой
(FIRST) и последней (LAST) строке;
•строке с некоторым абсолютным номером (ABSOLUTE n);
•сместить относительно текущей позиции на определенное расстояние
(RELATIVE n). |
33 |
|
Смещение курсора относительно текущей позиции – проблема:
в реляционной БД номер строки не имеет определенного смысла.
Если в коде потребуется перейти к конкретной строке, чтобы получить логический результат, то это должно быть заранее предусмотрено в модели БД.
34
4. Закрытие курсора
Когда все операции обработки данных завершены и курсор уже не нужен, его необходимо закрыть. При этом сервер освобождает
пространство в системной БД temdb, выделенное курсору при его
открытии.
35
Закрытие курсора снимает
блокировку данных, но сохраняет инструкцию SELECT. Курсор впоследствии может быть открыт в той же точке.
36
5. Освобождение курсора
Эта операция удаляет курсор как объект. При этом освобождается память, отведённая под курсор, и аннулируется его определение.
Последний оператор в наборе действий, связанных с использованием курсора, - DEALLOCATE, его общий синтаксис:
Особенность: оператор DEALLOCATE удаляет идентификатор или
курсорную переменную, но он
не обязательно удаляет сам курсор.
Сам курсор не удаляется до тех пор, пока все ссылающиеся на него идентификаторы будут освобождены
или перестанут действовать (при выходе за пределы области
действия).
38
Примеры использования курсоров
Пример 1.
После освобождения курсора
идентификатор myCursor больше не ассоциируется с множеством строк курсора, но поскольку на множество курсора еще ссылается переменная @cursorVariable, курсор и множество курсора не освобождаются.
Если явно не освободить также и курсорную переменную, то курсор и
множество курсора будут существовать, пока переменная не
утратит свое действие. |
40 |
|