Определение значения поля первичного ключа с помощью генератора




 

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

Для создания генератора используется оператор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-файл.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: