русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

II.5. Создание и изменение структуры таблиц средствами DDL


Дата добавления: 2015-07-09; просмотров: 1241; Нарушение авторских прав


Q5_1 Создание таблицы DEPARTMENT1 и заполнение ее данными:

 

demo@10g> CREATE TABLE DEPARTMENT1(

DEPARTMENT_ID NUMBER(2,0) NOT NULL,

NAME VARCHAR2(14) NULL,

LOCATION_ID NUMBER(3,0) NULL,

CHECK (DEPARTMENT_ID IS NOT NULL),

PRIMARY KEY (DEPARTMENT_ID),

FOREIGN KEY (LOCATION_ID) REFERENCES LOCATION(LOCATION_ID)

);

Таблица создана.

 

demo@10g>insert into DEPARTMENT1 (select * from DEPARTMENT);

11 строк создано.

 

Создание таблицы EMPLOYEE1 заполнение ее данными:

 

demo@10g> CREATE TABLE EMPLOYEE1(

EMPLOYEE_ID NUMBER(4,0) NOT NULL,

LAST_NAME VARCHAR2(15) ,

FIRST_NAME VARCHAR2(15) ,

MIDDLE_INITIAL VARCHAR2(1),

JOB_ID NUMBER(3,0),

MANAGER_ID NUMBER(4,0),

HIRE_DATE DATE,

SALARY NUMBER(7,2),

COMMISSION NUMBER(7,2),

DEPARTMENT_ID NUMBER(2,0) NOT NULL,

CHECK (DEPARTMENT_ID BETWEEN 10 AND 99) DISABLE,

PRIMARY KEY (EMPLOYEE_ID),

FOREIGN KEY (JOB_ID) REFERENCES JOB(JOB_ID),

FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID),

FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENT1(DEPARTMENT_ID),

CONSTRAINT LST_NAME_DEPT_ID UNIQUE(LAST_NAME,DEPARTMENT_ID)

);

Таблица создана.

 

demo@10g>insert into EMPLOYEE1 (select * from EMPLOYEE);

32 строк создано.

 

В созданной таблице – один столбец (employee_id) является primary key и три столбца (job_id, manager_id,department_id) образуют три разных foreign key по одному столбцу в каждом. Кроме того определено ограничение целостности (constraint) LST_NAME_DEPT_ID, требующий уникальности фамилии служащего в отделе. Столбцы, для которых указано «NOT NULL», должны быть заполнены информацией при вставке строк в таблицу. Ограничение CHECK задает диапазон значений DEPARTMENT_ID от 10 до 99. Это ограничение отключено (…DISABLE).

Q5_2 Добавим новые столбцы в таблицу EMPLOYEE1



demo@10g>alter table EMPLOYEE1 add birth_day date;

Таблица изменена.

demo@10g>alter table EMPLOYEE1 add E_SEX char(1) default ('M');

 

Q5_3 Удалим столбцы из таблицы EMPLOYEE1

demo@10g>alter table EMPLOYEE1 drop column middle_initial;

Таблица изменена.

demo@10g>alter table EMPLOYEE1 drop column commission;

Таблица изменена.

 

demo@10g> desc employee1

Имя Пусто? Тип

------------------------------------ -------- --------------

EMPLOYEE_ID NOT NULL NUMBER(4)

LAST_NAME VARCHAR2(15)

FIRST_NAME VARCHAR2(15)

E_SEX CHAR(1)

JOB_ID NUMBER(3)

MANAGER_ID NUMBER(4)

HIRE_DATE DATE

SALARY NUMBER(7,2)

DEPARTMENT_ID NOT NULL NUMBER(2)

BIRTH_DAY NOT NULL DATE

 

Q5_4 Добавим ограничение целостности к столбцу E_SEX

demo@10g> alter table EMPLOYEE1 add constraint check_sex check(e_sex in ('M','F'));

Таблица изменена.

 

Q5_5 Задействуем отключенное при создании таблицы EMPLOYEE1 ограничение целостности для столбца department_id, которым устанавливается диапазон значений от 10 до 99. Для такого задействования нам надо определить имя этого ограничения, которое Oracle присваивает автоматически при создании таблицы. Для этого извлечем данные из таблицы словаря Oracle, предварительно отформатировав один из ее столбцов:

demo@10g> col search_condition format a40

demo@10g> select constraint_name,search_condition,status from user_constraints

where table_name='EMPLOYEE1';

 

 

Теперь можно «включить» ограничение SYS_C006046 (как видно из результата запроса, ограничению с таким именем соответствует фраза «DEPARTMENT_ID BETWEEN 10 AND 99»):

 

demo@10g> alter table employee1 modify constraint SYS_C006046 enable;

Таблица изменена

Чтобы убедиться, что ограничение включено, повторим запрос к словарю:

demo@10g> select constraint_name,search_condition,status from user_constraints

where table_name='EMPLOYEE1';

Q5_6 Удалим добавленное ограничение целостности check_sex

 

demo@10g> alter table employee1 drop constraint check_sex;

Таблица изменена.

 

Q5_7 Скорректируем максимальную длину столбца LAST_NAME

 

demo@10g> alter table EMPLOYEE1 modify (last_name varchar2(30));

Таблица переименована.

Q5_8 Переименование таблицы

 

demo@10g> rename EMPLOYEE1 to EMPLOYEE2;

Таблица переименована.

 

Q5_9 Переименование столбца таблицы EMPLOYEE2

 

demo@10g> alter table employee2 rename column e_sex to sex;

Таблица изменена.

 

Q5_10 Удалим таблицы DEPARTMENT1, EMPLOYEE2:

demo@10g>drop table DEPARTMENT1;

drop table DEPARTMENT1

*

ошибка в строке 1:

ORA-02449: уникальный/первичный ключ в таблице, на которую ссылаются по внешнему ключу

На таблицу DEPARTMENT1 ссылаются записи таблицы EMPLOYEE2 (переименованной таблицы EMPLOYEE1), поэтому команду удаления таблицы DEPARTMENT1 надо писать иначе:

demo@10g>drop table DEPARTMENT1 cascade constraint;

Таблица удалена.

 

demo@10g>drop table EMPLOYEE2;

Таблица удалена.

 

Q5_11 Опция EXCEPTION INTO

Создадим таблицу, которую будем использовать для занесения информации о строках, нарушающих ограничение целостности

 

demo@10g> create table my_exceptions (

row_id rowid,

owner varchar2(30),

table_name varchar2(30),

constraint varchar2(30));

 

Нарушать ограничение целостности будем для таблицы S_GRADE. Текущее ее содержимое:

demo@10g> select * from S_GRADE;

Продублируем информацию в ней:

demo@10g> insert into S_Grade (select * from S_GRADE);

4 строк создано.

 

demo@10g> select * from S_GRADE;

Видно, что в столбце grade_id значения повторяются.

Скорректируем таблицу S_GRADE, сделаем попытку определить столбец grade_id, как primary key. Часть команды «…exseption into my_exseption» указывает Oracle, куда помещать информацию о тех строках таблицы, из-за которых корректировка невозможна – не удается столбец grade_id определить, как primary key.

demo@10g> alter table S_GRADE add constraint pk_grade_id primary key(grade_id)

exceptions into MY_EXCEPTIONS;

alter table S_GRADE add constraint pk_grade_id primary key(grade_id)

*

ошибка в строке 1:

ORA-02437: невозможно подтвердить (DEMO.PK_GRADE_ID) - нарушен первичный ключ

 

Так как значения столбца grade_id повторяются, выполнить команду невозможно, Oracle выдает сообщение об ошибке и помещает в таблицу MY_EXSEPTION строки, из-за которых эта ошибка появляется.

 

demo@10g> select * from my_exceptions;

 

 

Q5_12 Тип LONG в документации Oracle определяется устаревшим типом и оставляется для использования для обратной совместимости с прежними версиями Oracle. Таблица user_constraints, из которой мы выше извлекали информацию имеет столбец search_condition типа LONG.

Теперь попробуем извлечь из таблицы user_constraints информацию, воспользовавшись условием where для столбца search_condition типа LONG:

demo@10g> select * from user_constraints

where search_condition like '%DEPARTMENT%';

where search_condition like '%DEPARTMENT%'

*

ошибка в строке 2:



<== предыдущая лекция | следующая лекция ==>
II.4.2. Обработка транзакций | ORA-00932: несовместимые типы данных: ожидается NUMBER, получено LONG.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 6.376 сек.