Генератором называется хранимый на сервере БД механизм, возвращающий уникальные значения, никогда не совпадающие со значениями, выданными данным генератором в прошлом.
Для создания генератора используется операторGENERATOR ИмяГенератора;
Для генератора необходимо установить стартовое значение при помощи оператораGENERATOR ИмяГенератора ТО СтартовоеЗначение;
При этом СтартовоеЗначение должно быть целочисленным.. Для получения уникального значения к генератору можно обратиться с помощью функции_ID (ИмяГенератора, шаг);
Эта функция возвращает увеличенное на шаг предыдущее значение, выданное генератором (или увеличенное на шаг стартовое значение, если ранее обращений к генератору не было).
Значение шага должно принадлежать диапазону -231...+231 -1.
ЗАМЕЧАНИЕ. Не рекомендуется переустанавливать стартовое значение генератора или менять шаг при разных обращениях к GEN_ID. В противном случае генератор может выдать неуникальное значение и, как следствие, будет возбуждено исключение "Дублирование первичного или уникального ключа" при попытке запоминания новой записи в ТБД.
Пример. Пусть в БД определен генератор, возвращающий уникальное значение для столбца Code в таблице BookAuthors:GENERATOR GenCodeInBookAuthors;GENERATOR GenCodeInBookAuthors TO 0;
Обращение к генератору непосредственно из оператора INSERT, которое добавит первую запись таблицы BookAuthors (см. рис. 5.1):INTO BookAuthors
(Code, FamilyName, Name, Patronymic, Birthday, Deatheday)(GEN_ID(GenCodeInBookAuthors,1),
" Тихонов ", "Олег", " Николаевич ", NULL, NULL)
Добавление, изменение и удаление записей
Оператор INSERT применяется для добавления записей в объект. Он имеет следующий формат:INTO <объект> [(столбец1 [, столбец2...1)]
|
{VALUES (<значение1> [, <значение2>...]) | <оператор SELECT>}
Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых записях. Список столбцов может быть опущен. В этом случае подразумеваются все столбцы объекта, причем в том порядке, в котором они определены в данном объекте.
Поставить в соответствие столбцам списки значений можно двумя способами. Первый состоит в явном указании значений после слова VALUES, второй - в формировании значений при помощи оператора SELECT.
Оператор UPDATE применяется для изменения значения в группе записей или - в частном случае - в одной записи объекта. В качестве объекта могут выступать ТБД или просмотр, созданный оператором CREATE VIEW. В последнем случае могут изменяться значения записей из нескольких таблиц.
Формат оператора UPDATE:<объект>столбец1 = <значение1> [,столбец2 = <значение2>...]
[WHERE <условие поиска >]
При корректировке каждому из перечисленных столбцов присваивается соответствующее значение. Корректировка выполняется для всех записей, удовлетворяющих условию поиска. Условие поиска задается так же, как в операторе SELECT.
ВНИМАНИЕ! Если опустить WHERE <условие поиска>, в объекте будут изменены все записи.
В качестве объекта могут выступать ТБД или просмотр, созданный оператором CREATE VIEW. В последнем случае могут удаляться записи из нескольких таблиц. В частном случае может быть удалена только одна запись.
Формат оператора DELETE:FROM <объект>
[WHERE <условие поиска>];
ВНИМАНИЕ! Если опустить WHERE <условие поиска>, в объекте будут удалены все записи.
Пример SCRIPT-файла.
|
/*Первый оператор устанавливает набор символов для текущей сессии. В нашем случае это всегда WIN1251.*/NAMES WIN1251;
/*Если необходимо включаем оператор, который удаляет предыдущую версию базы данных "БИБЛИОТЕКА" на жестком диске. Для этого необходимо сначала подсоединиться к удаляемой базе данных, а затем ее удалить. Например: */"C:\DB\LIBRARY.GDB""S""s";DATABASE;
/*Оператор, который создает БД "БИБЛИОТЕКА", определяя ее пользователя и его пароль.*/DATABASE "C:/DB/LIBRARY.GDB""S""s"CHARACTER SET WIN1251;
/*Оператор, который подключает созданную базу данных, с указанием пользователя и его пароля.*/"C:\DB\LIBRARY.GDB""S""s";
/*Идут операторы, предназначенные для создания доменов, определенных в физической модели базы данных.*/
/*Домен предназначен для определения уникального номера строк для
всех отношений БД «Библиотека» (поле Code).*/DOMAIN AllCode AS INTEGERNULL;
/*Домен предназначен для определения множеств всех фамилий, имен и отчеств людей БД «Библиотека» (поля FamilyName, Name, Patronymic).*/DOMAIN FIO AS CHAR(30)NULLPXW_CYRL;
/*Домен предназначен для определения всех дополнительных сведений и автобиографий людей БД «Библиотека» (поля Note, ShortBiography).*/DOMAIN AllNote AS BLOB;
/*Домен предназначен для определения множеств всех названий книг БД «Библиотека» (поле Name в таблице Books).*/DOMAIN BookName AS CHAR(200)NULLPXW_CYRL;
/*Домен предназначен для определения множеств всех тиражей книг БД «Библиотека» (поле Drawing в таблице Books).*/DOMAIN AllDrawing AS INTEGER(VALUE >= 10)NULL;
/*Домен предназначен для определения множеств всех УДК БД «Библиотека» (поле UDK в таблице Books).*/DOMAIN AllUDK AS CHAR(20)NULLPXW_CYRL;
/*Домен предназначен для определения множеств всех шифров книг БД «Библиотека» (поле Cipher в таблице Books).*/DOMAIN AllCipher AS CHAR(10)NULLPXW_CYRL;
|
/*Далее идут операторы, которые создают таблицы базы данных.*/
/*Сначала создаем таблицы на которые есть ссылки внешних ключей - предложение FOREIGN KEY оператора CREATE TABLE. Из двух таблиц BookAuthors и Books первой должна быть создана таблица BookAuthors.*/
/*Создаем таблицу в которой будут храниться сведения об авторах книг.*/TABLE BookAuthors
(Code AllCode,FIO,FIO,FIO,DATE NOT NULL,DATE,AllNote,AllNote,KEY (Code));
/*Создаем таблицу в которой будут храниться сведения о книгах, которые числятся в фондах библиотеки.*/TABLE Books
(Code AllCode,BookName,AllCode,DATE NOT NULL,AllDrawing,AllUDK,AllCipher,AllNote,KEY (Code),KEY (Code) REFERENCES BookAuthors);
/*Для корректного определения хранимых процедур и триггеров, необходимо изменить разделитель между операторами. В WISQL этот разделитель можно опускать, а вот в SQL-скрипте разделитель обязателен. В теле хранимых процедур и триггеров операторы разделяются таким же разделителем. А после окончания тела процедуры или триггера будем ставить новый разделитель ###.*/TERM ###;
/*Создаем хранимые процедуры и триггера, которые обеспечивают ссылочную целостность при добавлении изменении и удалении строк из таблиц, а так же описывают наиболее часто встречающиеся запросы данных.*/
/*Восстанавливаем старый разделитель.*/TERM; ###
/*Идут операторы, которые заносят информацию в базу данных*/
/*Определяем генератор для поля Code таблицы BookAuthors и устанавливаем его начальное значение.*/GENERATOR BookAuthorsCode;GENERATOR BookAuthorsCode TO 0;
/*Определяем генератор для поля Code таблицы Books и устанавливаем его начальное значение.*/GENERATOR BooksCode;GENERATOR BooksCode TO 0;
/*Добавляем 5 записей в таблицу BookAuthors согласно таблицы 5.6.INTO BookAuthors
(CODE, FAMILYNAME, NAME, PATRONYMIC, BIRTHDAY)
(GEN_ID(BookAuthorsCode, 1), 'Тихонов', 'Олег', 'Николаевич', '01/31/1940');INTO BookAuthors
(CODE, FAMILYNAME, NAME, PATRONYMIC, BIRTHDAY)
(GEN_ID(BookAuthorsCode, 1), 'Акуленко', 'Леонид', 'Дмитриевич', '12.03.1934');INTO BookAuthors
(CODE, FAMILYNAME, NAME, PATRONYMIC, BIRTHDAY)
(GEN_ID(BookAuthorsCode, 1), 'Процуто', 'Виктор', 'Сергеевич', '25.07.1941');INTO BookAuthors
(CODE, FAMILYNAME, NAME, PATRONYMIC, BIRTHDAY)
(GEN_ID(BookAuthorsCode, 1), 'Колосов', 'Геннадий', 'Евгеньевич', '29.10.1951');INTO BookAuthors
(CODE, FAMILYNAME, NAME, PATRONYMIC, BIRTHDAY)
(GEN_ID(BookAuthorsCode, 1), 'Казаков', 'Игорь', 'Елисеевич', '15.08.1947');;
Отчет должен содержать:
1. Номер, наименование и цель лабораторной работы.
2. Таблицы с информацией, которую Вы добавили в базу данных. Для тех кто работает с базой данных «БИБЛИОТЕКА» наличие таблиц 5.1 - 5.10 обязательно.
. SCRIPT-файл.