Язык определения данных (DDL) включает операторы, управляющие объектами базы данных. К объектам БД относятся таблицы, индексы, представления. Для каждой конкретной базы данных существует свой набор объектов базы данных, который может значительно расширять набор объектов, предусмотренный стандартом. В СУБД Oracle все объекты базы данных, принадлежащие одному пользователю, образуют схему базы данных.
Язык определения данных включает в себя три основные команды:
- CREATE – создание объекта;
- ALTER – изменение объекта;
- DROP – удаление объекта.
В качестве объекта здесь может быть: таблица, представление, триггер, индекс, ограничение целостности, процедура, функция, пакет, объектные пользовательские типы данных, последовательности и т.д., т.е. фактически весь набор типов объектов СУБД Oracle. Важно отметить, что управление все параметрами работы СУБД осуществляется командой ALTER. Для каждого типа объекта БД и команды DDL существует определенный синтаксис и набор опций. Общий синтаксис для команд DDL выглядит так:
|
|
Команда Объект Имя_объекта Набор_опций_и_операций
Команда создания таблицы – CREATE TABLE
Оператор CREATE TABLE создает таблицу в базе данных. Созданная таблица будет пуста (если не был указан запрос в предложении AS). Строки данных, как правило, добавляются в таблицу с помощью оператора INSERT. В команде CREATE TABLE определяется имя таблицы и набор столбцов. Она также определяет типы данных и размеры столбцов. Каждая таблица должна иметь, по крайней мере, один столбец. Знак подчеркивания «_» обычно используется для разделения слов в именах таблиц.
Синтаксис создания таблицы:
CREATE TABLE пользователь.имя_таблицы
(описание_столбца | эл-т_таблицы,
описание_столбца | эл-т_таблицы,...
) [AS запрос]
Пользователь - владелец создаваемой таблицы.
описание_столбца - описание столбцов.
эл-т_таблицы - описание ограничений для таблицы.
Рассмотрим пример создания таблицы «Физических лиц»:
CREATE TABLE s_fiz_lic (kod NUMBER(7,0) NOT NULL, fam VARCHAR2(30), im VARCHAR2(25), otch VARCHAR2(25), p_vidan VARCHAR2(80), p_ser_nom VARCHAR2(20) ); |
Порядок столбцов в таблице определяется порядком, в котором они указаны. Имена столбца не должны разделяться при переносе строки (что делается для удобочитаемости) и отделяются запятыми. Ограничение NOT NULL означает, что данное поле не может содержать пустое значение.
В нижеприведенном примере производится создание таблицы «Должности», в качестве дополнительных опций таблицы для столбца «KOD» - указывается опция NOT NULL, а так же служебные слова PRIMARY KEY, которые определяют, что необходимо создать первичный ключ по данному столбцу.
|
|
CREATE TABLE dolj (kod NUMBER(10) NOT NULL PRIMARY KEY, naimen VARCHAR2(50)); |
Кроме стандартного способа создания таблицы, в котором мы определяем структуру таблицы, существует способ, при котором можно создать таблицу на базе ранее созданной таблицы с данными. Структура создаваемой таблицы и данные определяется запросом. В данном примере мы создаем дубликат таблицы «s_fiz_lic» с именем «s_fiz_lic2».
CREATE TABLE s_fiz_lic2 as (SELECT * FROM s_fiz_lic); |
Рассмотрим более сложный пример создания таблицы физических лиц с имнем «s_fiz_lic3». При создании таблицы в этом примере мы применяем следующие опции для столцов:
- поле «KOD» - не может быть пустым – NOT NULL, является первичным ключом – PRIMARY KEY;
- поле «FIO» - не может быть пустым – NOT NULL, проверка вводимых данных в таблицу, значения поле должно вводится в верхнем регистре – CHECK(fio=UPPER(fio));
- поле «POL» - по умолчанию значение поле равно 1 – DEFAULT 1;
- поле «KOD_DOLJ» - создается вторичный ключ с именем «fk_dolj» ссылвющийся на поле «KOD» таблицы «DOLJ»
CREATE TABLE s_fiz_lic3 (kod NUMBER(10) NOT NULL PRIMARY KEY, fio VARCHAR2(250) NOT NULL CHECK(fio=UPPER(fio)), pol NUMBER(1) DEFAULT 1, kod_dolj NUMBER(10) CONSTRAINT fk_dolj REFERENCES dolj (kod), data_r DATE); |
Просмотреть структуру таблицы можно командой DESC < table_name >. Пример, DESC s_fiz_lic. В результате на экран будет выведена структруа таблицы:
Таблица 4 – Структура таблицы «s_fiz_lic»
Имя столбца | Пусто? | Тип данных |
KOD | NOT NULL | NUMBER(7) |
FAM | VARCHAR2(30) | |
IM | VARCHAR2(25) | |
OTCH | VARCHAR2(25) | |
P_VIDAN | VARCHAR2(80) | |
P_SER_NOM | VARCHAR2(20) |
Команда создания послеловательности – CREATE SEQUENCE
Последовательностью называется объект ORACLE, генерирующий неповторяющиеся целые числа. Полученные из последовательности числа очень часто используются в качестве значений для первичных ключей.
Синтаксис создания последовательности:
CREATE SEQUENCE пользователь.имя_последовательности
INCREMENT BY n
START WITH n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
ORDER | NOORDER
При использовании последовательности:
- для выбора следующего номера - используется вызов типа my_seq.NEXTVAL, где my_seq – имя последовательности;
- для выбора текущего номера - используется вызов тип my_seq.CURRVAL, где my_seq – имя последовательности.
Рассмотрим пример создания последовательности с именем «my_seq». В этом примере генерируемое значение последовательности начнется со 100, и будет увеличиваться на 1. Возвращаемые значения являются отсортированными – ORDER, последовательность является циклической – это означает, что при достижении свое максимального значения - 1000, она начнет возвращать значения со стартового значения.
CREATE SEQUENCE my_seq INCREMENT BY 1 START WITH 100 CYCLE MAXVALUE 1000 ORDER; |
В следующем примере приведены способы получения текущего и следующего значения последовательности, для этого используется системная таблица с именем «DUAL».
SELECT my_seq.nextval FROM dual; SELECT my_seq.currval FROM dual; |