- •Кафедра «Информационные технологии»
- •Основы языка 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, тем не менее, бывает вполне оправданным,
- •Пример.
Работа со строками с помощью курсора
T-SQL поддерживает 3 команды для работы с курсорами:
FETCH, UPDATE, DELETE.
Команда FETCH извлекает указанную
строку из множества строк курсора.
Простейший синтаксис этой команды:
При этом возвращается строка в позиции
курсора (текущая строка). |
41 |
|
Пример
2.
Команда FETCH может не только
возвращать строку, но и позволяет
сохранять значения из возвращенного столбца в переменных. Чтобы сохранить результаты выполнения команды FETCH в переменной - синтаксис:
список_переменных – перечень имен переменных, разделяемых запятыми.
43
Перед выполнением команды
FETCH необходимо объявить
переменные. Список переменных должен содержать переменную для каждого столбца, фигурирующего в операторе SELECT, определяющем курсор.
Тип данных переменной должен
совпадать или быть совместимым с
типом данных столбца.
44
Пример 3
В примерах 2, 3 оператор FETCH
использовался для возвращения текущей строки, которой была 1-я строка набора строк.
Синтаксис FETCH предусматривает также ряд ключевых слов для указания другой строки. С этими ключевыми словами FETCH будет возвращать заданную строку, и делать ее текущей. В результате можно задать
абсолютную позицию строки 46в курсоре.
Ключевые слова оператора FETCH:
FIRST и LAST - возвращают первую и последнюю строки курсора соответственно;
ABSOLUTE n - задает строку, отстоящую на n строк от начала (при n>0) или от конца (при n<0) множества строк курсора. Значение n можно задать числом (например, 3) или переменной (например, @theRow).
47
Пример
4.
Выборка
данных из курсора
(3-й строки) и задание переменных
Учтено, что
инструкция
ABSOLUTE
используется в
статических курсорах
(курсоры в примерах
48
1, 2 - динамические).
Модификация и удаление строк
через курсоры
Для выполнения изменений с помощью курсора - специальная форма предложения WHERE, поддерживающая модификацию через курсор:
Такое обновление данных называется
позиционным обновлением49.
T-SQL также поддерживает
позиционное удаление - синтаксис:
Аргумент курсор_или_переменная
определяет имя курсора, в котором необходимо выполнить изменения (в соответствующей таблице будет обновлена или удалена строка,
установленная текущей в курсоре).
50