
- •1. Компоненты архитектуры субд Oracle.
- •2. Архитектура экземпляра Oracle. Файловая структура бд. Файл параметров. Файл паролей.
- •Физическая структура
- •Создание файла spfile
- •Файл паролей.
- •Архитектура экземпляра Oracle. Экземпляр, области памяти (sga-память, разделяемый пул, кэш буферов данных, кэш буферов бд, журнальный буфер).
- •4. Архитектура экземпляра Oracle (фоновые процессы).
- •5. Сопровождение управляющего файла
- •Содержимое управляющего файла
- •Получение информации об управляющем файле
- •7.Режимы работы базы.
- •7.1. Команда startup
- •Запуск базы данных в режиме nomount
- •7.2. Остановка базы данных shutdown
- •8.Сигнальные и трассировочные файлы
- •Сигнальный файл
- •Файлы трассировки фоновых процессов
- •Пользовательские файлы трассировки
- •9. Сопровождение журнальных файлов
- •Журнальные группы и их элементы
- •Как используются журнальные файлы
- •Удаление групп оперативного журнала
- •Удаление элементов оперативного журнала
- •Настройка размеров журнальных файлов
- •10.Состав директории oracle.
- •11. Сопровождение табличных пространств и файлов данных
- •12. Табличное пространство system и другие
- •15. Сопровождение отката транзакций Виды undo-сегментов
- •27. Триггеры бд.
- •1.Триггер проверяет возможность удаления записи из таблицы «Клиент». Если в таблице «Заказы» существуют связанные записи, то выдается сообщение об ошибке. В противном случае запись удаляется.
- •4. Триггер проверяет, чтобы дата заказа билетов не превышала даты проведения спектакля. Иначе выдает ошибку.
- •Окна Модули
- •Для вывода на экран отчета:
- •Дополнительно: Работа с представлениями словаря данных субд Oracle Содержание словаря данных
- •Использование словаря данных
- •Структуры хранения и отношения между ними
- •Создание базы данных Использование Database Configuration Assistant
27. Триггеры бд.
1.Триггер проверяет возможность удаления записи из таблицы «Клиент». Если в таблице «Заказы» существуют связанные записи, то выдается сообщение об ошибке. В противном случае запись удаляется.
SQL> edit trigdelete;
\\Текст триггера:
CREATE OR REPLACE TRIGGER trigdelete
BEFORE DELETE
ON client
REFERENCING OLD as old_row
FOR EACH ROW
DECLARE
A number;
BEGIN
SELECT count(clientid) INTO A
FROM orders
WHERE clientid=:old_row.clientid;
if (A > 0) THEN
raise_application_error(-20001, 'Neobxodimo udalit svyazannie zapisi iz tablici zakazi!');
END IF;
END;
/
SQL> SET SERVEROUTPUT ON;
SQL> @trigdelete
Триггер создан.
SQL> delete from client
2 where clientid=3;
delete from client
*
ошибка в строке 1:
ORA-20001: Neobxodimo udalit svyazannie zapisi iz tablici zakazi!
ORA-06512: на "SCOTT.TRIGDELETE", line 10
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGDELETE'
SQL> delete from client
2 where clientid=2;
1 строка удалена.
SQL> select * from client;
CLIENTID FIO CL_PHONE EMAIL
---------- -------------------- ----------- ---------------
1 Komarov AV 4563214 kav@mail.ru
3 Ivanova IM 3216589 iim@mail.ru
4 Smirnova SO 9854786 ssov@mail.ru
2. Триггер проверяет возможность вставки данных в таблицу «Заказы». Если параметры новой записи соответствуют кодам клиента, спектакля и театра в соответствующих таблицах «Клиент», «Спектакль» и «Театр», то запись успешно вставляется. Если какая-либо из записей не соответствует значению первичного ключа, выдается ошибка.
SQL> edit triginsert;
\\Текст триггера:
CREATE OR REPLACE TRIGGER triginsert
BEFORE INSERT
ON Orders
REFERENCING NEW as new_row
FOR EACH ROW
DECLARE
CountPlay NUMBER;
CountClient NUMBER;
CountTheatre NUMBER;
BEGIN
SELECT count(playid)
INTO CountPlay
FROM play
WHERE playid=:new_row.playid;
SELECT count(clientid)
INTO CountClient
FROM client
WHERE clientid=:new_row.clientid;
SELECT count(theatreid)
INTO CountTheatre
FROM theatre
WHERE theatreid=:new_row.theatreid;
IF (CountPlay = 0) THEN
raise_application_error(-20001,'Spektaklya s takim kodom ne sushestvuet!!!');
END IF;
IF(CountClient = 0) then
raise_application_error(-20001,'Klienta s takim kodom ne sushestvuet!!!');
END IF;
IF(CountTheatre = 0) then
raise_application_error(-20001,'Teatra s takim kodom ne sushestvuet!!!');
END IF;
END;
/
SQL> SET SERVEROUTPUT ON;
SQL> @triginsert
Триггер создан.
SQL> insert into orders
2 values (4, 2, 1, 3, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Klienta s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 22
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 1, 10, 3, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Spektaklya s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 19
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 1, 1, 5, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Teatra s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 25
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 3, 3, 1, '13-05-2009', '17-05-2009', '17-05-2009');
1 строка создана.