Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
42-51.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
34 Кб
Скачать
☆

47. Инвертированные списки.

Для обеспечения ускорения доступа по вторичным ключам используются структуры, называемые инвертированными списками, которые послужили основой организации индексных файлов для доступа по вторичным ключам. Инвертированный список - это двухуровневая индексная структура. Здесь на первом уровне находится файл, в котором упорядочено расположены значения вторичных ключей. Каждая запись с вторичным ключом имеет ссылку на номер блока в цепочке блоков, содержащих номера записей с данным значением вторичного ключа. На 2 уровне находится цепочка блоков, содержащих номера записей, имеющих одно и то же значение вторичного ключа. При этом блоки 2 уровня упорядочены по значению вторичного ключа. И наконец, на 3 уровне находится собственно основной файл. Механизм доступа к записям по вторичному ключу при подобной организации записей весьма прост. На первом шаге ищем в области 1 уровне заданное значение вторичного ключа, а затем по ссылке считываем блоки 2 уровня, содержащие номера записей с заданным значениями вторичного ключа, а далее уже прямым доступом загружаем в рабочую область пользователя содержимое всех записей, содержащих заданное значение вторичного ключа.

48. Понятие курсора. Типы курсоров.

Курсор в SQL – это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL. Если текущий оператор – запрос к базе данных, в памяти сохраняется и строка данных запроса, называемая текущим значением, или текущей строкой курсора. Указанная область в памяти поименована и доступна для прикладных программ.

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

Категории курсоров:

  • Последовательные (позволяют выбирать данные только в одном направлении – от начала к концу)

  • Прокручиваемые (предоставляют большую свободу действий – допускается перемещение в обоих направлениях и переход к произвольной строке результирующего набора курсора)

SQL Server поддерживает курсоры:

  • Статические (В схеме со статическим курсором информация читается из базы данных один раз и хранится в виде моментального снимка (по состоянию на некоторый момент времени), поэтому изменения, внесенные в базу данных другим пользователем, не видны)

  • Динамические (Динамический курсор поддерживает данные в "живом" состоянии, но это требует затрат сетевых и программных ресурсов)

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

  • управляемые набором ключей (Записи идентифицируются на момент выборки, и тем самым отслеживаются изменения)

49. Управление курсорами на языке t-sql. Объявление курсора

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

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

[INSENSITIVE] [SCROLL] CURSOR

FOR SELECT_оператор

[FOR { READ_ONLY | UPDATE

[OF имя_столбца[,...n]]}]

В среде MS SQL Server принят следующий синтаксис команды создания курсора:

DECLARE имя_курсора CURSOR [LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC | FAST_FORWAR]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]

[TYPE_WARNING]

FOR SELECT_оператор

[FOR UPDATE [OF имя_столбца[,...n]]]

Открытие курсора

Для открытия курсора и наполнения его данными из указанного при создании курсора запроса SELECT используется следующая команда:

OPEN { { [GLOBAL] имя_курсора }

|@имя_переменной_курсора }

Выборка данных из курсора

Сразу после открытия курсора можно выбрать его содержимое (результат выполнения соответствующего запроса) посредством следующей команды:

FETCH [ [NEXT | PRIOR | FIRST | LAST

| ABSOLUTE {номер_строки

| @переменная_номера_строки}

| RELATIVE {номер_строки | @переменная_номера_строки} ]

FROM ] { { [GLOBAL ] имя_курсора } | @имя_переменной_курсора }

[INTO @имя_переменной [,...n]]

Изменение и удаление данных

UPDATE имя_таблицы SET {имя_столбца = {DEFAULT | NULL | выражение} } [,...n]

WHERE CURRENT OF { { [GLOBAL] имя_курсора} |@имя_переменной курсора}

За одну операцию могут быть изменены несколько столбцов текущей строки курсора, но все они должны принадлежать одной таблице.

DELETE имя_таблицы

WHERE CURRENT OF { { [GLOBAL] имя_курсора} |@имя_переменной курсора}

Закрытие курсора

CLOSE {имя_курсора | @имя_переменной_курсора}

Освобождение курсора

DEALLOCATE { имя_курсора | @имя_переменной_курсора }

Для контроля достижения конца курсора рекомендуется применять функцию: @@FETCH_STATUS

Функция @@FETCH_STATUS возвращает:

0, если выборка завершилась успешно;

-1, если выборка завершилась неудачно вследствие попытки выборки строки, находящейся за пределами курсора;

-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]