Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Команда DECLARE CURSOR

Команда DECLARE — по одна из четырех команд, используемых для обработки курсора, наряду с командами FETCH, OPEN и CLOSE. Курсоры позволяют вести обработку но одной строке, а не обрабатывать сразу весь набор данных. Команда DECLARE CURSOR указывает, какие конкретно записи нужно извлекать для построчного манипулирования из конкретной таблицы или представления.

Иными словами, курсоры являются особенно важными для реляционных баз данных, поскольку базы основываются на наборах данных, а большинство языков программирования, ориентированных на работу в клиентах, работают со строками. Это важно в силу двух причин. Во-первых, курсоры позволяют программистам создавать программы, используя методологии, которые поддерживаются их любимым языком программирования, работающим построчно. Во-вторых, курсоры работают иначе, чем заданное по умолчанию функционирование некоторых платформ реляционных баз, которые работают с наборами данных, и это приводит к тому, что на этих платформах курсоры могут работать значительно медленнее, чем стандартные операции с наборами.

Ключевые слова

DECLARE имя_курсора

Курсору присваивается имя, уникальное для контекста, в котором он определяется (например, в базе данных или схеме, в которой он создается). Имя должно быть уникальным в том смысле, что никакие другие курсоры не должны иметь то же имя.

SENSITIVE | INSENSITIVE | ASENSITIVE

Определяется способ взаимодействия курсора с исходной таблицей и результирующий набор, который возвращает курсорный запрос. Параметры следующие.

SENSITIVE

База данных будет работать с результирующим набором данных напрямую, и курсор будет «видеть» изменения в результирующем наборе по мере продвижения по записям.

INSENSITIVE

База данных будет создавать временную, но отдельную копию результирующего набора данных, так что изменения, вносимые в результирующий набор другими операциями, будут «невидимы» для курсора.

ASENSITIVE

База данных будет сама определять, нужно ли делать копию результирующего набора. Предложение ASENSITIVE в SQL 2003 принято по умолчанию.

[NO] SCROLL

База данных не будет принудительно обеспечивать построчную обработку, используя команду FETCH NEXT, но для результирующего набора можно использовать все формы предложения FETCH. При указании предложения NO SCROLL построчная обработка обеспечивается принудительно.

{WITH | WITHOUT} HOLD

Курсор будет оставаться открытым, если в транзакции встретится инструкция COMMIT. И наоборот, предложение WITHOUT HOLD определяет, что курсор должен закрыться, если в транзакции встретится инструкция COMMIT. (Курсор, в котором используется предложение WITH HOLD, можно закрыть только при помощи инструкций ROLLBACK или CLOSE CURSOR.)

{WITH WITHOUT} RETURN

Используемое только в хранимой процедуре предложение WITH RETURN заставляет базу данных вернуть результирующий набор (если он еще открыт) при завершении работы хранимой процедуры. Предложение WITHOUT RETURN (принимаемое по умолчанию) все открытые курсоры неявно закрываются по завершении работы хранимой процедуры.

FOR инструкция_ select

Определяется инструкция SELECT, которая создает строки результирующего набора данных курсора. Как и в обычной инструкции SELECT, результаты запроса можно отсортировать с помощью предложения ORDER BY.

FOR {READ ONLY] UPDATE [OF столбец […]]}

Указывается, что курсор нельзя обновлять никакими способами (FOR READ ONLY). Это предложение принимается по умолчанию, если курсор определяется с параметрами SCROLL или INSENSITIVE, если запрос содержит предложение ORDER BY или если запрос обращен к необновляемой таблице. В качестве альтернативы вы можете указать предложение FOR UPDATE OF столбец/, столбец2 /, …/, определяя столбцы, для которых вы хотите выполнить инструкции UPDATE. Вы можете опустить список столбцов в предложении FOR UPDATE OF, и будут использоваться все столбцы, указанные в курсоре.

Источник