Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / L23 / Лекции 2_3.doc
Скачиваний:
44
Добавлен:
16.04.2013
Размер:
119.3 Кб
Скачать

Создание последовательности

CREATE SEQUENCE имя_последовательности

[INCREMENT BY n]

[START WITH n]

[MAXVALUE n | NOMAXVALUE]

[MINVALUE n | NOMINVALUE]

[CACHE n | NOCACHE]

[CYCLE | NOCYCLE]

Любая последовательность имеет два поля NEXTVAL и CURRVAL.

Примеры:

SQL> CREATE SEQUENCE test_seq;

Sequence created

SQL> SELECT test_seq.nextval FROM DUAL;

NEXTVAL

-------

1

SQL> SELECT test_seq.nextval FROM DUAL;

NEXTVAL

-------

2

SQL> SELECT test_seq.nextval FROM DUAL;

NEXTVAL

-------

3

SQL>

Посмотреть имеющиеся последовательности, можно используя представление USER_SEQUENCES в словаре системы:

DESC user_sequences;

SELECT sequence_name, last_number, increment_by

FROM user_sequences;

Изменить параметры последовательности нельзя! Её надо удалить и создать заново. Оператора типа «ALTER SEQUENCE» нет.

DROP SEQUENCE имя_последовательности;

Создание данных, определяемых пользователем

Пример.

CREATE TYPE name_info AS OBJECT (

ename VARCHAR2(10),

address VARCHAR2(10),

city VARCHAR2(10) ) ;

CREATE TABLE employee (

emp_id NUMBER(4),

employee_info NAME_INFO );

Insert into employee values (100,

name_info(‘Boby Marx’, ‘Braiton 3’, ‘New-York’));

Создание синонима

CREATE[PUBLIC]SYNONYMsynonym-name

FORobject-name;

Применяется для сокращения объёма sql-операторов. Имя объекта должно чётко именовать объект, например

TB_EMPLOYEE_OF_MANUFACTURING

Но в запросах хотелось бы использовать что-то покороче, например

EM01

Создание ограничений

ALTER TABLEtable-nameMODIFY(column-name constraint [,column-name constraint] [,…])

Отметим, что «UNIQUE» и «PRIMARY KEY» - это почти одно и то же, в обоих случаях автоматически создаётся индекс.

Пример:

CREATE TABLE DEPT (

deptno NUMBER(2) NOT_NULL,

dname VARCHAR2(14),

CONSTRAINT dept_primary_key PRIMARY KEY (DEPTNO));

CREATE TABLE EMP (

empno NUMBER(4) NOT NULL,

ename VARCHAR2(10),

mgr NUMBER(4) CONSTRAINT emp_self_key REFERENCES EMP(EMPNO),

cur_emp VARCHAR2(1) CHECK (cur_emp IN (‘Y’,’N’)),

deptno NUMBER(2) NOT_NULL,

CONSTRAINT emp_foreign_key FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),

CONSTRAINT emp_primary_key PRIMARY KEY (EMPNO) );

Посмотреть имеющиеся ограничения можно, можно используя представление USER_CONSTRAINT в словаре системы.

Представление USER_CONS_COLUMNS показывает перечень столбцов, на которых заданы ограничения, а представление USER_INDEXES показывает, какие уникальные индексы созданы для первичных ключей.

Бывает, что ограничения препятствуют вводу данных и их нужно временно отменить оператором:

ALTER TABLEtable_nameDISABLE CONSTRAINTимя_ограничения [CASCADE]

а затем можно снова включить его оператором:

ALTER TABLEtable_nameENABLE CONSTRAINTимя_ограничения

Полное уничтожение ограничения осуществляется:

DROP CONSTRAINTимя_ограничения

По умолчанию строка в родительской таблице не удаляется, если в дочерних таблицах есть связи с этой строкой. Для сохранения ссылочной целостности, удалить такую строку можно только вместе со связанными строками, используя опцию «CASCADE ON DELETE».

Соседние файлы в папке L23