Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Answers v.0.2.docx
Скачиваний:
5
Добавлен:
25.09.2019
Размер:
192.86 Кб
Скачать

7. Подмножество языка ddl: операторы create, alter, drop. Представления, их значение; обновляемые представления.

Подмножество языка DDL

Оператор CREATE служит для создания любого типа объектов, из которых состоит база данных, в том числе таблиц.

CREATE TABLE имя_таблицы(

поле1 тип1 [ограничения],

[поле2 тип2 [ограничения],

…]);

Возможные ограничения в таблицах:

        NOT NULL – значение атрибута должно быть определено (опция NOT NULL);

        UNIQUE – значения атрибутов являются уникальными (уникальный ключ);

        PRIMARY KEY – атрибут является первичным ключом (первичный ключ);

        CHECK – определяет условие, которому должны удовлетворять значения атрибута (домен);

        DEFAULT – присвоение значений «по умолчанию» для атрибутов.

Используя приведенный выше синтаксис, вместе с созданием таблицы можно вместе с атрибутами таблицы сразу же задать и ограничения декларативной и ссылочной целостности, но только в том случае, если они касаются только одного конкретного атрибута. Если же первичный, уникальный или вторичный ключ должны быть составными, для их создания нужно применять команду ALTER TABLE.

CREATE TABLE Dealers1(

D_id NUMBER,

Name VARCHAR2(30),

Procent NUMBER(4,2),

Comments VARCHAR2(50) DEFAULT ‘no comments’);

Оператор ALTER служит для изменения структуры любых объектов, из которых состоит база данных. В зависимости от типа объекта, изменяются и параметры команды ALTER. Далее рассмотрены примеры применения команды ALTER для изменения структуры объектов TABLE.

Для добавления атрибута к таблице применяется следующий синтаксис:

ALTER TABLE имя_таблицы ADD поле тип [ограничения];

Например, для добавления к таблице Dealers целого поля Age можно выполнить следующую команду: ALTER TABLE Dealers ADD Age NUMBER(2);

Для удаления атрибута таблицы применяется следующий синтаксис:

ALTER TABLE имя_таблицы DROP COLUMN поле; 

ALTER TABLE Dealers DROP COLUMN Age;

Оператор DROP служит для удаления объектов из базы данных. Синтаксис удаления любого типа объекта из базы данных, в том числе таблицы, выглядит следующим образом:

DROP тип объекта имя объекта;

Например, для удаления таблицы Dealers из базы данных необходимо выполнить следующую команду: DROP TABLE Dealers;

В данном случае таблица Dealers успешно удалится только в том случае, если на нее не ссылаются внешний ключи других таблиц. В том случае, если внешние ключи существуют, но удалить таблицу все-таки необходимо, можно либо сначала удалить все внешние ключи, ссылающиеся на удаляемую таблицу, после чего удалить таблицу, либо используя параметр CASCADE CONSTRAINTS:

DROP TABLE Dealers CASCADE CONSTRAINTS;

В последнем случае, если внешние ключи, ссылающиеся на удаляемую таблицу, существуют, они будут удалены без изменений в полях внешних ключей подчиненных таблиц, даже если при создании внешних ключей были указаны параметры, задающие каскадные действия.

Представления - это таблицы чье содержание выбирается или получается из других таблиц. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления - подобны окнам, через которые вы просматриваете информацию, которая фактически хранится в базовой таблице.

CREATE VIEW Londonstaff

AS SELECT *

FROM Salespeople

WHERE city = 'London';

Безусловно обновляемыми являются представления, полученные из единственной базовой таблицы простым исключением некоторых ее строк и (или) столбцов.

8. Подмножество языка DCL: операторы GRANT, REVOKE. Системные привилегии, привилегии на объекты, роли.

9. Транзакции, операторы управления транзакциями: COMMIT, ROLLBACK, SAVEPOINT; журнал транзакций, уровни блокировок.

10. PL/SQL, структура, основные операторы.

11. Курсоры, операторы работы с курсором, оператор SELECT INTO.

12. Процедуры, функции, пакеты.

13. Триггеры, их основные свойства и значение.

Триггер – это особого вида процедура, которая выполняется автоматически при возникновении некоторого события, указанного в спецификации триггера, - триггерного события (triggering event).

В PL/SQL можно создать триггеры, которые будут срабатывать в одной из следующих ситуаций:

применение оператора DML (INSERT, UPDATE, DELETE) к определенному объекту схемы;

применение оператора DDL (CREATE, ALTER, DROP) внутри схемы или базы данных;

вход пользователя в систему или выход его из системы, ошибка сервера, запуск базы данных или останов базы данных.

Триггеры нельзя вызывать напрямую из кода программы. Oracle вызывает их автоматически в ответ на определенное событие.

Триггеры используются для реализации сложных бизнес-правил. Например, триггер может проверять, истек ли срок продаваемого товара к моменту осуществления сделки продажи, или нет. Если истек, то триггер может выполнять некоторые автоматические действия по предотвращению продажи данного товара.

Триггеры могут обеспечивать прозрачное протоколирование событий, например, отслеживать сколько раз каждый из пользователей обращался к определенной таблице.

Типы триггеров

Момент_срабатывания определяет, когда будет срабатывать триггер: до (BEFORE), после (AFTER) и вместо (INSTEAD OF) наступления триггерного события (выполнения запускающего оператора).

Если указано значение BEFORE, триггер выполняется до каких-либо проверок ограничений на строки, затрагиваемые триггерным событием. Никакие строки не блокируются. Триггер этого типа называется, соответственно, BEFORE-триггером (BEFORE trigger).

Если выбрать ключевое слово AFTER, то триггер будет срабатывать после того, как запускающий оператор завершит свою работу и будут выполнены проверки всех ограничений. В этом случае затрагиваемые строки блокируются на время выполнения триггера. Триггер этого типа называется AFTER-триггером (AFTER trigger).

Триггеры INSTEAD OF применяются только для представлений (VIEW). Проблема состоит в том, что операторы DML не применимы к представлениям. Нельзя добавлять, изменять или удалять записи из представлений. Триггеры INSTEAD OF вызываются вместо выполнения DML-выражений. Если вы выполните оператор DML к представлению, то в соответствующем триггере можно выполнить какие-либо действия, и тогда у пользователя создастся впечатление, что он работает с таблицей.

Триггерное_событие может принимать значения INSERT, UPDATE или DELETE.

Различным триггерные события можно комбинировать с помощью оператора OR. Например:

DELETE OR INSERT остальные_операторы

В случае использования UPDATE можно указать список столбцов, при изменении которых будет срабатывать триггер:

UPDATE OF столбец_1, столбец_2, ...

Пример триггера

Триггер, который будет запрещать изменение имени менеджера (поле NAME).

CREATE OR REPLACE TRIGGER onManagersUpdate

BEFORE UPDATE OF name ON Managers

FOR EACH ROW

DECLARE

cant_change_name EXCEPTION;

BEGIN

IF :new.name<>:old.name THEN

RAISE cant_change_name;

END IF;

EXCEPTION

WHEN cant_change_name THEN

dbms_output.put_line(`Нельзя изменить имя менеджера`);

:new.name:=:old.name;

END;

/

Данный триггер не позволит изменить значение поля NAME в таблице MANAGERS. При попытке сделать это сработает триггер, внутри которого производится сравнение старого значения и нового значения поля NAME. Если они различаются, то активизируется исключение, при обработке которого на экране появится соответствующее сообщение

Удаление триггеров, также как и удаление всех остальных объектов СУБД Oracle, осуществляется посредством оператора DROP:

DROP имя_триггера;

Если по каким-то причинам триггер нужно на время отключить, то это можно сделать при помощи команды ALTER TRIGGER имя_триггера DISABLE;

Обратное включение триггера осуществляется при помощи команды ALTER TRIGGER имя_триггера ENABLE;

Поскольку с одной таблицей могут быть связаны несколько триггеров, то бывает необходимо отключить сразу все эти триггеры. Это делается при помощи команды ALTER TABLE имя_таблицы DISABLE ALL TRIGGERS;

Включение всех триггеров осуществляется командой ALTER TABLE имя_таблицы ENABLE ALL TRIGGERS;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]