- •Кафедра «Информационные технологии»
- •Основы языка 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, тем не менее, бывает вполне оправданным,
- •Пример.
Один курсор может основываться на нескольких таблицах, расположенных как в одной, так и в разных БД. Операция считывания данных, определенных в курсоре, называется выборкой (fetch).
11
Если за одну операцию курсор позволяет выбрать несколько строк данных, то такой курсор называется
блочным.
Курсоры могут быть разделены на две категории: последовательные (forward-only) и прокручиваемые
(scrollable).
12
Последовательные курсоры -
позволяют последовательно выбирать данные только в одном
направлении – от начала к концу
набора строк.
Прокручиваемые курсоры -
допускают перемещение по строкам
в обоих направлениях и переход к произвольной строке
результирующего набора курсора.
13
Серия последовательных выборок из курсора называется
прокруткой курсора
(или скроллингом курсора).
14
Типы и поведение курсоров
Существует несколько типов
курсоров, разных по возможностям
обработки данных.
Тип курсора определяется на
стадии создания курсора и не
может быть изменен.
15
Статический курсор (static cursor, другое название – курсор моментального снимка, snapshot cursor).
При открытии такого курсора сервер выбирает все данные согласно заданным критериям и сохраняет полный результирующий набор строк в системной БД tempdb.
На время открытия курсора
устанавливается блокировка на все строки, включенные в полный результирующий набор курсора16 .
В результате статический курсор не изменяется после создания и
всегда отображает тот набор данных, который существовал в БД
на момент открытия курсора.
Если другие пользователи изменят, добавят или удалят в исходной таблице данные, включенные в курсор, эти изменения
не отразятся в статическом курсоре.
17
Внесение изменений в статические курсоры невозможно, так как нет гарантии в существовании и неизменности строк данных, на основе которых построен курсор.
Поэтому такие курсоры открываются в режиме «только для чтения».
18
Динамический курсор (dynamic cursor) в определенном смысле противоположен статическому.
При использовании динамических курсоров не создается полная копия исходных данных, а выполняется динамическая выборка данных из исходных таблиц только при обращении пользователя к тем или иным данным. Сервер блокирует только выбранные строки на время выборки.
19
Все изменения, вносимые пользователями в полный результирующий набор курсора, будут видны в курсоре при выборке. При этом изменения данных отслеживаются только при выборке строк.
Если другой пользователь внес в данные изменения уже после их выборки курсором, то эти изменения не
будут отражены в курсоре. 20