
- •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
4. Триггер проверяет, чтобы дата заказа билетов не превышала даты проведения спектакля. Иначе выдает ошибку.
SQL> edit ORDERS_T1;
\\Текст триггера:
CREATE OR REPLACE TRIGGER ORDERS_T1
BEFORE
insert on ORDERS
for each row
declare
x date;
begin
select play_date into x
from play
where playid=:new.playid;
if :new.order_date>x then
raise_application_error(-20001, 'Слишком поздно!');
end if;
end;
/
SQL> SET SERVEROUTPUT ON;
SQL> @ ORDERS_T1
Триггер создан.
SQL> insert into orders
2 values (6, 1, 5, 2, '14-06-2009', null, null);
insert into orders
*
ошибка в строке 1:
ORA-20001: Слишком поздно!
ORA-06512: на "SCOTT.ORDERS_T1", line 8
ORA-04088: ошибка во время выполнения триггера 'SCOTT.ORDERS_T1'
SQL> insert into orders
2 values (6, 1, 5, 2, '01-06-2009', null, null);
1 строка создана.
28-29. Разработка клиентского приложения в СУБД Oracle средствами Developer/2000 6i. Описание Oracle Forms.
Developer/2000 обеспечивает комплект компонентов с общими возможностями и общим интерфейсом построителей для создания форм, отчетов и графических диаграмм.
Поддерживается общий интерфейс построителей, включающий Объектный навигатор, редактор макета, редактор PL/SQL и палитру свойств, а также предлагается исчерпывающая оперативная справочная система.
У каждого компонента Developer/2000 имеется набор предварительных установок, которые пользователь может изменять для текущего и последующих сеансов работы с построителем.
Окна Модули
Канвы
Блоки данных
Элементы
Отчеты
Списки значений
Триггеры
Сигналы (Alerts)
Параметры
Меню
Форматы файлов Forms 6i
*.FMB - Файл формы построенного в Forms Builder
*.FMX - Файл формы сгенерированного для выполнения в RunForms
*.PLL - Файл пользовательской библиотеки
*.PLX - Файл сгенерированной пользовательской библиотеки для
использования в сессии RunForm
*.MMB - Файл пользовательского меню построенного в Forms Builder
*.MMX - Файл меню сгенерированного для выполнения в сеансе RunForm
Принципы построения формы в Forms 6i:
Структура формы:
Форма представляет собой объект Вашего приложения , который выполняет определенную функцию той задачи под которую Вы проектируете приложение.
Форма отслеживает события, поступающие из рабочей среды такие как:
активизация / деактивизация формы
аппаратные события (от клавиатуры , мыши ,таймера…)
и т.п.
Перехватить эти события и обработать их по своему алгоритму можно при помощи объявления соответствующих триггеров.
Взаимосвязь формы с таблицами БД Oracle осуществляется с помощью базовых блоков , которые поддерживают функции редактирования, добавления и удаления записей в таблицах БД . Один блок связан содной таблицей или представлением…
Форма отслеживает события, поисходящие в блоке такие как:
активизация / деактивизация блока
добавление / удаление / корректировка записи в блоке
выполнение запроса
сохранение изменений
и т.п.
Для обработки событий на уровне блока необходимо объявить соответствующие триггеры с Вашим текстом обработчика события.
Иначе событие будет обработано стандартным образом…
Триггеры на уровне элемента , блока или формы оформляются в виде PL SQL блоков , программных единиц (процедур , функций , пакетов)
Если программные единицы повторяются в нескольких формах , то имеет смысл вынести их в пользовательские библиотеки…
Базовые и небазовые (не связанные с таблицей БД) блоки размещаются на графических представлениях окон – канвах, которые принадлежат одному из окон.
На канвах кроме блоков можно разместить статический текст, рисунки графические объекты и т.п.
При запуске формы на выполнение в сеансе RunForm в первую очередь происходит соединение с базой данных : создается так называемая сессия.
Номер сессии доступен любой форме сеанса RunForm , в процедурах и триггерах БД …
Обмен данных между формами осуществляется с помощью списков параметров и глобальных переменных.
Глобальные переменные после объявления их в одной из форм становятся доступными всем формам и живут до окончания сессии RunForm или до ее уничтожения.
Объявить глобальную переменную можно в любом месте любого PL SQL блока:
:global.my_global:=’USER1’;
:global.other_gl:=’Форма’;
Форме доступны системные переменные в которых хранится состояние текущей сессии :
:system.form_status - состояние формы
:system.current_block - имя текущего блока
:system.message_level - уровень скрытия сообщений Формы и т.д.
Использование Forms Builder для построения форм, меню и библиотек
Основные компоненты Forms Builder
Навигатор объектов позволяет Вам оперативно перемещаться между :
формами
меню
библиотеками
и т.д.
создавать,копировать,редактировать одновременно несколько форм , меню и их компонентов
Окно свойств объектов
отображает перечень свойств и их значений присущих запрашиваемому объекту
Меню
Forms Builder позволяет открыть , создать , удалить объект из дерева компонентов с помощью меню или палитры инструментов навигатора объектов. Через меню определяются и параметры среды разработчика, текущий шрифт, размещение объектов на канвах , вызываются подсказки и т.п. Используя палитру инструментов или меню Вы можете сохранить, запустить на выполнение форму, сгенерировать Ваше меню …
Редактор Канвы
С помощью редактора канвы Вы можете придать форме необходимый внешний вид, разместив блоки , статические тексты и графические объекты. Для этого используется палитра инструментов;
Толщина и стиль линий графических объектов изменяется через меню Format ;
Расположение объектов канвы выравнивается через меню Arrange;
Редактор PL SQL
С помощью редактора PL SQL Вы можете создать тело процедуры , функции или обработчика события в триггере…
Редактор меню
С помощью редактора меню Вы можете построить модуль меню с необходимой иерархией.
Cохраните его в виде файла меню *.MMB и сгенерируйте в RunTime *.MMX - файл , который можно подключать к форме…
Место расположения элемента в последовательности навигации определяется его положением под узлом в объектном навигаторе.
31-32. Триггеры форм.
Триггер будет срабатывать при переходе к следующей закладке. Вследствие этого блок данных на целевой закладке станет текущим.
Требуется создать триггер модуля формы WHEN-TAB-PAGE-CHANGED и ввести в его тело следующий код:
declare
name_block_pre varchar2(20);
name_block_curr varchar2(20);
rowcount number;
begin
if :System.Tab_New_Page = 'PTABFILM' then
name_block_curr := 'FILM';
elsif :System.Tab_New_Page = 'PTABKLIENT' then
name_block_curr := 'KLIENT';
else
name_block_curr := 'DOGOVOR';
end if;
Go_Block(name_block_curr);
end;
Необходимо организовать заполнение блоков данных при загрузке формы.
Для этого тело триггера WHEN-NEW-BLOCK-INSTANCE каждого из блоков должно содержать следующий код.
execute_query;
Необходимо создать триггер для проверки правильности введенных данных.
Для этого создать триггер WHEN-VALIDATE-ITEM элемента KLIENTID (Код клиента) блока DOGOVOR (Договор). Триггер должен содержать следующий код:
declare
TYPE cur IS REF CURSOR;
cur_klient cur;
Num NUMBER;
begin
OPEN cur_klient FOR
SELECT KlientID
FROM klient
WHERE KlientID = :DOGOVOR.KlientID;
fetch cur_klient into Num;
if cur_klient%ROWCOUNT < 1 THEN
Set_Alert_Property('ALERT_DOG',TITLE,'Ошибка ввода данных.');
Set_Alert_Property('ALERT_DOG',ALERT_MESSAGE_TEXT,'Клиента с таким кодом не существует в БД.');
Num := SHOW_ALERT('ALERT_DOG');
Go_Item('DOGOVOR.KLIENTID');
CLEAR_ITEM;
:DOGOVOR.KlientID := '';
end if;
CLOSE cur_klient;
end;
Требуется создать два предупреждения ALERT_FILM и ALERT_KLIENT. Предупреждения будут срабатывать при попытке ввода значения первичного ключа уже существующего в БД. Для этого:
Свойству Title (заголовок) элементов ALERT_FILM и ALERT_KLIENT присвоить одинаковые «Ошибка ввода данных».
В поле свойства Message (сообщение) предупреждения ALERT_FILM ввести «Фильм с таким кодом уже имеется в БД.».
В поле свойства Message предупреждения ALERT_KLIENT ввести «Клиент с таким кодом уже имеется в БД.».
Свойству Button 1 Label обоих элементов присвоить значение « &OK ».
Свойству Button 2 Label обоих элементов присвоить пустое значение.
В тело триггеров WHEN-VALIDATE-ITEM ввести следующий программный код:
Для элемента FILMID блока данных FILM:
declare
TYPE cur IS REF CURSOR;
cur_film cur;
Num NUMBER;
begin
OPEN cur_film FOR
SELECT FilmID
FROM film
WHERE FilmID = :FILM.FilmID;
fetch cur_film into Num;
if cur_film%ROWCOUNT > 0 THEN
Num := SHOW_ALERT('ALERT_FILM');
Go_Item('FILM.FILMID');
CLEAR_ITEM;
:FILM.FilmID := '';
end if;
CLOSE cur_film;
end;
Создать предупреждение, которое запрашивало бы согласие пользователя на фиксацию изменений. Для этого следует создать подтверждение ALERT_COMM. Для этого:
Свойству Title нового подтверждения присвоить значение «Подтверждение».
Свойству Message присвоить значение «Вы действительно хотите зафиксировать изменения в БД, после фиксации отменить изменения станет невозможно?».
Свойству Alert Style (стиль сигнала) присвоить значение «Caution».
Свойству Button 1 Label присвоить значение « &Да ».
Свойству Button 2 Label присвоить значение « &Нет ».
Триггер WHEN-BUTTON-PRESSED кнопки B_COMMIT блока данных BLOCK33 будет содержать код:
if Show_Alert('ALERT_COMM') = ALERT_BUTTON1 then
commit;
end if;
При переходе к другой форме. Тело триггера WHEN-BUTTON-PRESSED этой кнопки должно содержать код:
show_window('WIN_FILM');
Go_Block('FILM');
Для кнопки «Выход». В тело триггера WHEN-BUTTON-PRESSED ввести код:
hide_window('WIN_FILM');
Go_Item('PB_FILM');
Создать триггер модуля формы WHEN-WINDOW-CLOSED, тело которого будет содержать код:
Go_Item('PB_FILM');
Навигация по записям: Чтобы информация автоматически загружалась в поля блока FILM1 при появлении окна WIN_DOGOVORS, необходимо ввести в тело триггера WHEN-NEW-BLOCK-INSTANCE этого блока следующий код:
execute_query;
Выход |
Close_form('MODULE1'); |
Добавить запись |
Last_Record; Create_Record; |
Удалить запись |
Delete_Record; |
Зафиксировать |
if Show_Alert('ALERT_COMM') = ALERT_BUTTON1 then commit; end if; |
Отменить |
rollback; execute_query; |
Следующая запись |
if :System.Last_Record = 'FALSE' then Next_Record; end if; |
Предыдущая запись |
previous_record; |