Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Расширения реляционной модели.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
248 Кб
Скачать
☆

Перемещение курсора

Курсор поддерживает информацию о текущей позиции в итоговом наборе команды SELECT. Перемещение курсора к заданной записи выполняется командой MOVE. Синтаксис команды MOVE:

MOVE [ FORWARD | BACKWARD | RELATIVE ]

[ число ALL | NEXT | PRIOR ]

{ IN | FROM } курсор

Как видно из приведенного объявления, синтаксис команды MOVE очень близок к синтаксису команды FETCH. Впрочем, команда MOVE никаких записей не возвращает и лишь перемещает текущую позицию курсора. Смещение задается целочисленной константой или ключевым словом ALL (перемещение в заданном направлении на максимально возможное расстояние), NEXT или PRIOR.

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

Команда CLOSE закрывает ранее открытый курсор и уничтожает хранимые по ссылке курсора данные. Курсор также автоматически закрывается при выходе из транзакционного блока, в котором он находится, при фиксации транзакции командой COMMIT или ее откате командой ROLLBACK. Синтаксис команды CLOSE (курсор — имя закрываемого курсора):

CLOSE <курсор>

Массивы

Массив для SQL-ориентированных СУБД является нетипичным типом данных, но иногда применяется на практике. Тип массив логично применять в задачах, где атомарные значения имеют векторную структуру. К примеру, в геоинформационных системах: тип данных координата представляет собой двухмерный или трехмерный вектор. Отдельное оперирование с элементами этого вектора без привлечения других элементов не происходит.

Для создания массива в инструкции CREATE TABLE после указания базового типа ставятся [].

CREATE TABLE … (

…

vector int [ ] …

matrix int [ ] [ ] … ,

…

);

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

Вставка значений в поля массива

Обычно вставка производится с помощью массивов-констант.

{‘текст’ [, ‘текст2’ [, …]]}

[] –не обяз., {} – обяз.

INSERT INTO geo (id, name, coord)

VALUES (1, ‘Saratov’, ‘{43.15, 56.17}’) ; ‘ {{1,2}, {3,4}}’

Выборка из полей массивов и индексирования.

В отличие от языков программирования СУБД обычно нумеруют элементы массива с 1. При выборке поля массива можно указать индекс выбираемого элемента. Например,

SELECT coord [1], coord[2] FROM geo

Срезы

Срез – это возможность обращения к элементам массива по диапазону индекса.

SELECT vector [7:20] FROM

Результат среза возвращается в виде константы массива, которая фактически описывает подмножество элементов исходного массива.

Замечание. Срезы могут приводить к непредсказуемым результатам при оперировании с многомерными массивами.

Обновление данных в полях массива

  1. Полная модификация – все содержимое массива заменяется новыми данными, заданными в виде массива констант.

  2. Модификация среза – срез заменяется новыми данными, заданными в виде массива константы.

  3. Модификация элементов - отдельный элемент массива заменяется новой константой, относящейся к базовому типу данных массива. При этом элемент задается индексом.

20