- •Раздел 1 Утилита sql*Plus, простые запросы выборки столбцов и строк
- •Раздел 2 Функции Oracle sql
- •Раздел 3 Выборка данных из нескольких таблиц
- •Раздел 4 Другие команды языка манипулирования данными dмl и обработка транзакций
- •Раздел 5 Создание и изменение таблиц средствами ddl
- •Раздел 6 Другие объекты базы данных
Раздел 5 Создание и изменение таблиц средствами ddl
5.1. Создание таблиц
Q5_1
Создание таблицы
SQL> create table hr_persons (
id number(10,0),
person_name varchar2(32),
birthday date,
sex char(1) default '?',
mod_date date default sysdate,
mod_user varchar2(30) default user);
Table created.
Q5_2
Ограничение NOT NULL
SQL> create table women (
id number(5) constraint women_nn_id not null,
womname varchar2(27) constraint women_nn_womname not null);
Tablecreated.
Q5_3
Ограничение UNIQUE
Ограничение на уровне таблицы. Отделы в одном городе должны иметь разные имена
SQL> create table DEPTNO (
DEPTNO number(5) constraint DEPTNO_nn_DEPTNO not null,
dname varchar2(9),
loc varchar2(10),
constraint DEPTNO_unq_dname#loc unique(dname,loc));
Table created.
SQL> drop table DEPTNO;
Tabledropped.
5.2. Ограничения целостности
Q5_4
Ограничение на уровне столбца. Все отделы должны иметь определенные, разные имена
SQL> create table DEPTNO (
DEPTNO number(5) not null,
dname varchar2(9) not null
constraint DEPTNO_unq_dname unique,
loc varchar2(10));
Table created.
SQL> drop table DEPTNO;
Table dropped.
Q5_5
Ограничение PRIMARY KEY. Ограничение на уровне нескольких столбцов таблицы
SQL>createtableplace_name(
city varchar2(20),
region varchar2(20),
country varchar2(20),
numof_people number(8),
constraint place_name_pk primary key (city,region,country));
Tablecreated.
Q5_6
Ограничение на уровне столбца
SQL> create table women (
id number(5) constraint women_pk primary key,
womname varchar2(27));
Table created.
Q5_7
Ограничение FOREIGNKEY
Каждый служащий (таблица EMP) должен работать в отделе, описанном в таблицеDEPTNO. Номер руководителя должен выбираться из значений столбцаEMPNOэтой же таблицы
SQL> create table DEPT (
DEPTNO number(2) not null,
dname varchar2(14),
loc varchar2(13),
constraint DEPTNO_pk primary key (DEPTNO));
Table created.
SQL> create table emp (
empno number(4) not null,
ename varchar2(10),
job varchar2(9),
mrg number(4) constraint emp_self_key references emp (empno),
hiredate date,
sal number(7,2),
comm number(7,2),
DEPTNO number(2) not null,
constraint emp_fk foreign key (DEPTNO) references DEPT (DEPTNO),
constraint emp_pk primary key (empno));
Tablecreated.
Q5_8
Ограничение CHECK
Номера отделов будут находиться в диапазоне от 10 до 99. DISABLE– ограничение определено, но пока не поддерживается. Имена отделов записываются в верхнем регистре. Расположение отделов только в Далласе, Бостоне, Нью-Йорке и Чикаго
SQL> create table DEPTNO (
DEPTNO number(2) constraint check_DEPTNO
check (DEPTNO between 10 and 99) disable,
dname varchar2(9) constraint check_dname
check (dname = upper(dname)),
loc varchar2(10) constraint check_loc
check (loc in ('DALLAS','BOSTON','NEW YORK','CHICAGO')));
Tablecreated.
5.3. Комплексный пример
Q5_9
Таблица HR_MEN, содержит сведения о мужчинах,HR_WOMEN– данные о женщинах,HR_FAMILYописывает семейные связи
SQL> create table hr_men (
id number(8) constraint hr_men_pk primary key,
name varchar2(30) not null,
birthday date);
Table created.
SQL> create table hr_women (
id number(8),
name varchar2(30) not null,
bithday date,
constraint hr_women_pk primary key (id));
Table created.
SQL> create table hr_family (
id number(10) constraint hr_family_pk primary key,
man_id number(8) constraint hr_family_fk_hr_men references hr_men,
woman_id number(8),
constraint hr_family_fk_hr_women foreign key (woman_id) references hr_women,
constraint check_hr_family check ((man_id+woman_id) is not null));
Table created.
5.4. Другие опции
Q5_10
Опция EXCEPTION INTO
Таблица, содержащая информацию о строках, нарушающих ограничение целостности
SQL> create table my_exceptions (
row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
Table created.
5.5. Создание таблицы на основе запроса к другим таблицам
Q5_11
Таблица сотрудников отдела 30
SQL>createtableDEPTNO30as
select EMPNO,ename,job,sal
from EMP where DEPTNO=30;
Tablecreated.
Q5_12
Таблица, содержащая сведения об имени, окладе и категории служащих компании
SQL> create table emp_sal (name,salary,grade) as
select e.ename,e.sal,s.grade
from EMP e,SALGRADE s
where e.sal between s.losal and s.hisal;
Tablecreated.
5.6. Изменение структуры таблицы
Q5_13
Добавить новый столбец USER_NAMEв таблицуEMP_salс опциейNOTNULL
SQL> alter table EMP_sal add (user_name varchar2(30));
Table altered.
SQL> update EMP_sal set user_name = 'UNKNOWN';
16 rows updated.
SQL> alter table EMP_sal modify user_name constraint EMP_nn_uname not null;
Tablealtered.
Q5_14
Ограничение на размер оплаты в 5000
SQL> alter table EMP_sal add (constraint emp_check_sal check (salary <= 5000));
Tablealtered.
Q5_15
Изменить максимальную длину столбца ENAME
SQL> alter table EMP_sal modify (name varchar2(25));
Table altered.
Q5_16
Переименование таблицы
SQL> rename commission to comm;
Table renamed.