- •Нормальные формы er-моделей.
- •Более сложные модели er модели.
- •Свойства:
- •Материал
- •Паттерны проектирования бд.
- •Задачи проектирования с применением графа.
- •Паттерн «периодические реквизиты»
- •Алгоритм получения действующего значения реквизита.
- •Паттерн. Документ с табличной частью.
- •Расширение курса бд по sql
- •1) Select Тип, цена, цена
- •Индекс. Синтаксис создания индекса
- •Автоматизация стандартных процедур.
- •Триггеры
- •Транзакции и курсоры
- •Объявление курсора
- •Выборка из курсора.
- •Перемещение курсора
Перемещение курсора
Курсор поддерживает информацию о текущей позиции в итоговом наборе команды 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
Результат среза возвращается в виде константы массива, которая фактически описывает подмножество элементов исходного массива.
Замечание. Срезы могут приводить к непредсказуемым результатам при оперировании с многомерными массивами.
Обновление данных в полях массива
Полная модификация – все содержимое массива заменяется новыми данными, заданными в виде массива констант.
Модификация среза – срез заменяется новыми данными, заданными в виде массива константы.
Модификация элементов - отдельный элемент массива заменяется новой константой, относящейся к базовому типу данных массива. При этом элемент задается индексом.
