- •Кафедра «Информационные технологии»
- •Основы языка 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, тем не менее, бывает вполне оправданным,
- •Пример.
Аргументы:
input_expression определяет входное значение (имя переменной или функция); when_expression определяет один из
вариантов значений аргумента input_expression. 61
Если аргументы when_expression и input_expression совпадают, то конструкция CASE…END возвращает значение result_expression.
Можно указать несколько строк WHEN… THEN, которые будут содержать все возможные варианты величины input_expression.
Если входное значение не найдено ни в одной из строк WHEN… THEN, то будет возвращено значение, указанное после ключевого слова ELSE.62
Примеры использования конструкции CASE…END
63
64
COALESCE
Эта конструкция возвращает первое
ненулевое значение из списка и имеет следующий синтаксис:
Внутри скобок в конструкции COALESCE через запятую перечисляется множество значений. Конструкция возвратит первое значение, не равное NULL. 65
Например:
Конструкция COALESCE может быть заменена конструкцией CASE…END.
66
WHILE…BREAK & CONTINUNUE
С помощью этой конструкции
организуются циклы, причем это единственный тип циклов, поддерживаемый T-SQL. Синтаксис:
Аргумент Boolean_expression задает логическое условие, при истинности которого выполняется следующая за ним команда или блок команд BEGIN…END. После выполнения команды опять
проверяется логическое условие. Если условие по-прежнему
выполняется, то цикл продолжается до тех пор, пока логическое условие не возвратит FALSE. После этого выполнение цикла завершается68 .
Цикл можно принудительно остановить, если в теле цикла выполнить команду BREAK.
Если же нужно начать цикл заново, не дожидаясь выполнения всех команд
в теле цикла, необходимо выполнить команду CONTINUE. После этой команды цикл переходит к проверке логического условия.
69
Пример 1.
70