русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

DECLARE


Дата добавления: 2015-07-09; просмотров: 588; Нарушение авторских прав


В синтаксисе языка TSQL курсор описывается следующим образом:

 

DECLARE cursor_name CURSOR

[LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]

[TYPE_WARNING]

FOR <команда SELECT>

[FOR UPDATE [OF список_имен_столбцов_разделенных_запятыми]]

 

1. [LOCAL | GLOBAL] – необязательная составляющая описания, которая показывает область действия (видимости) курсора: LOCAL – для пакета, процедуры; GLOBAL – для соединения в целом. Значение по умолчанию определяется опцией используемой БД default to local cursor, которая, как правило, установлена в FALSE.

2. [FORWARD_ONLY | SCROLL] - необязательная составляющая описания, которая показывает порядок извлечения данных из курсора. FORWARD_ONLY – предполагает последовательное извлечение всех строк курсора от 1-ой до последней (FETCH NEXT). SCROLL – предполагает возможность использования всех 6 способов извлечения (FETCH FIRST, FETCH LAST, FETCH PRIOR, FETCH NEXT, FETCH RELATIVE, FETCH ABSOLUTE) строк из курсора.

3. [STATIC | KEYSET | DYNAMIC | FAST_FORWARD] - необязательная составляющая описания, которая определяет свойства курсора по связанности с исходной таблицей (таблицами).

· STATIC – описывает курсор, при создании которого делается временная копия данных, содержащихся в курсоре.

· KEYSET – определяет последовательность строк, принадлежащих курсору, которая фиксируется во время открытия курсора. При этом множество ключей, однозначно определяющих каждую строку курсора, сохраняются во временной БД tempdb. Изменение неключевых значений в исходной таблице (таблицах) отображаются для курсора. Вставка новых строк в исходную таблицу (таблицы)– не отображается для курсора. Изменение ключевых значений в исходной таблице (таблицах) не отображается для курсора, а извлечение удаленной строки из курсора приводит к ошибке (функция @@FETCH_STATUS возвращает значение -2). Однако, изменения сделанные с использованием конструкции WHERE CURRENT OF отображаются для курсора.



· DYNAMIC – описывает курсор, отображающий все изменения в исходных таблицах. Последовательность строк, принадлежность к курсору также может меняться для каждой очередной выборки данных из курсора. При использовании этой опции извлечение данных с помощью команды FETCH ABSOLUTE недопустимо.

· FAST_FORWARD – курсор, имеющий свойства FORWARD_ONLY и READ_ONLY и использующий некую оптимизацию при работе. Не совместимо с FOR UPDATE, с FORWARD_ONLY и с OPTIMISTIC.

Следует отметить, что:

· Если указано свойство FORWARD_ONLY, и не выбрано ни одно из свойств [STATIC | KEYSET | DYNAMIC | FAST_FORWARD], то по умолчанию выбирается свойство DYNAMIC.

· Если указано свойство SCROLL, и не выбрано ни одно из свойств [STATIC | KEYSET | DYNAMIC | FAST_FORWARD], то по умолчанию выбирается свойство KEYSET.

· Если не указано ни одно из свойств [FORWARD_ONLY | SCROLL] и указано одно из свойств [STATIC | KEYSET | DYNAMIC], то выбирается SCROLL, иначе - FORWARD_ONLY.

· Если не указано ни одно из свойств [FORWARD_ONLY | SCROLL] и [STATIC | KEYSET | DYNAMIC | FAST_FORWARD], то по умолчанию выбирается FORWARD_ONLY и DYNAMIC, соответственно.

· Если запрос SELECT содержит рекурсивное CTE, то курсор может иметь только свойства (тип) STATIC или FAST_FORWARD. Если это не так, то тип курсора будет автоматически преобразован в STATIC.

4. [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] - необязательная составляющая описания, которая определяет поведение курсора при обновлении данных с его использованием (конструкция WHERE CURRENT OF для команд UPDATE и DELETE). Значение по умолчанию OPTIMISTIC, если не указано свойство STATIC или FAST_FORWARD, иначе - READ_ONLY.

· READ_ONLY – запрещает изменение данных исходной таблицы (таблиц) с использованием курсора. Не совместимо с [FOR UPDATE [OF список_имен_столбцов_разделенных_запятыми]].

· SCROLL_LOCKS – гарантирует успешность изменения данных исходной таблицы (таблиц) с использованием курсора.

· OPTIMISTIC – гарантирует успешность изменения данных исходной таблицы (таблиц) с использованием курсора, если строка была изменена после создания курсора.

5. [TYPE_WARNING] - необязательная составляющая описания, которая указывает на необходимость сообщения клиенту, создавшему курсор, в случае неявного преобразования типа курсора.

6. FOR <команда SELECT> - обязательная составляющая описания, которая определяет запрос SELECT, наполняющий (связывающий) курсор данными. В этом запросе SELECT не допустимы секции COMPUTE, COMPUTE BY, FOR BROWSE, INTO.

7. [FOR UPDATE [OF список_имен_столбцов_разделенных_запятыми]] - необязательная составляющая описания, которая задает список столбцов, которые могут быть изменены через курсор в конструкции WHERE CURRENT OF. Если указано только FOR UPDATE, то, используя курсор, можно менять все столбцы исходной таблицы (таблиц). Если присутствует [OF список_имен_столбцов_разделенных_запятыми], то через курсор можно менять только те столбцы, которые присутствуют в списке после слова OF. При использовании опций SCROLL_LOCKS или OPTIMISTIC необязательно использовать FOR UPDATE без указания списка столбцов, т.к. это предполагается по умолчанию.

 

Можно также описать переменную типа курсор следующим образом:

DECLARE @cursor_var cursor

а в дальнейшем с помощью команды SET присвоить этой переменной уже описанный курсор или описать курсор прямо в команде SET.

 

OPEN

Команда OPEN служит для открытия курсора, а также для наполнения его данными (выполнения соответствующего запроса SELECT). Она имеет следующий синтаксис:

OPEN {[GLOBAL] <имя курсора> | @cursor_variable},

где ключевое слово GLOBAL показывает, что курсор с именем <имя курсора> является глобальным.

 

FETCH.

Команда FETCH служит для извлечения строки из курсора и имеет следующий синтаксис:

FETCH

[

[NEXT | PRIOR | FIRST | LAST |

ABSOLUTE {номер строки | @var} |

RELATIVE {номер строки | @var}

]

FROM

]

{[GLOBAL] <имя курсора> | @cursor_variable}

[INTO @var1, @var2, …]

1. [NEXT | PRIOR | FIRST | LAST | ABSOLUTE {номер строки | @var} | RELATIVE {номер строки | @var}] – необязательная часть команды, которая определяю извлекаемую из курсора строку (если используется, то обязательно использовать ключевое слово FROM):

· NEXT – извлечь следующую строку после текущей и сделать ее текущей. Если курсор только открыт, то извлекается 1-ая строка и она же становится текущей. Эта опция является опцией по умолчанию.

· PRIOR - извлечь предыдущую строку перед текущей и сделать ее текущей. Если курсор только открыт, то строка не извлекается.

· FIRST – извлечь 1-ую строку курсора и сделать ее текущей.

· LAST - извлечь последнюю строку курсора и сделать ее текущей.

· ABSOLUTE {номер строки | @var} – после ключевого слова ABSOLUTE указывается либо номер извлекаемой строки, либо переменная, содержащая этот номер. Если номер положительный, то отсчет строки ведется от начала курсора, если отрицательный – с конца. Если номер = 0, то строка не извлекается. Если строка извлекается, то она становится текущей.

· RELATIVE {номер строки | @var} – после ключевого слова RELATIVE указывается либо номер извлекаемой строки, либо переменная, содержащая этот номер. Если номер положительный, то отсчет строки ведется от текущей строки курсора вниз, если отрицательный – от текущей строки курсора вверх. Если номер = 0, то извлекается текущая строка. Если при первом после открытии выполнении команды FETCH указывается отрицательный номер или 0, то строка не извлекается. Если строка извлекается, то она становится текущей.

2. {[GLOBAL] <имя курсора> | @cursor_variable} – задает курсор с помощью имени курсора или переменной. Ключевое слово GLOBAL показывает, что курсор является глобальным.

3. [INTO @var1, @var2, …] – необязательная часть команды, позволяющая выводить значения элементов извлекаемой строки не на экран, а в переменные. Количество и типы данных переменных должны совпадать с количеством и типами данных извлекаемых столбцов.

 

CLOSE.

Закрывает указанный открытый курсор, освобождая все блокировки данных сделанные курсором и выбранное курсором множество строк (после выполнения этой команды обращения к курсору недопустимо, если не выполнить повторное открытие). Однако после выполнение команды OPEN с закрытым курсором снова можно работать (извлекать данные). Команда имеет следующий синтаксис:

CLOSE {[GLOBAL] <имя курсора> | @cursor_variable},

где ключевое слово GLOBAL показывает, что курсор с именем <имя курсора> является глобальным.

 



<== предыдущая лекция | следующая лекция ==>
Задание | Функции работы с курсорами.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.253 сек.