Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
05.06.2015
Размер:
385.02 Кб
Скачать

Раздел 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.