Пример генерации приложений с помощью CASE*Generator.
12.1, где были разработаны диаграмма потоков данных, концептуальная и логическая схемы БД. Ниже приводится описание модуля «Результаты торгов».
1. Перед проектированием нового модуля приложения необходимо зарегистрировать его имя в хранилище CASE*Dictionary (Oracle). Для этого выберите пункт Design/Module Design/Module Definition утилиты CASE*Dictionary. На экране появится форма Module Definition (рис. 12.25). Заполните поля этого окна для модуля «Результаты торгов», включая сокращенное и полное имя нового модуля, а также его тип, формат и сложность. Перед сохранением данных следует указать признак Y в поле Define Data Usage.
2. В результате на экране появится окно Define Data Usage (рис. 12.26), позволяющее определить более детальную информацию о поддерживаемых этим модулем данных.
Рис. 12.26. Окно Define Data Usage |
С помощью окна, представленного на рис. 12.26, можно ввести используемые модулем имена таблиц и соответствующих столбцов. Можно даже задать, какие столбцы выводить на экран, какие операции выполнять над каждым столбцом, формат вывода столбца, метку каждого столбца и многое другое. Окно Define Data Usage показывает, как модуль Результаты торгов использует таблицу SEC_COU (Курс продажи) и ее столбцы. Также можно описать использование столбцов таблицы SEC_ISS (Эмиссия ЦБ).
3. Сохраните описание модуля Результаты торгов.
4. Теперь необходимо сгенерировать приложение. Запустите продукт CASE*Generator, введите имя пользователя и пароль и выберите пункт меню CASE*Generator/SQL*Forms.
5. Перед тем, как начать реализацию новой системы, необходимо задать некоторые параметры.
Выберите пункт Use Preferences. Введите имя прикладной системы (SECURITES) и номер версии. Далее в меню в центре экрана выберите U. После этого можно отредактировать параметры пользователя. В нижней части экрана CASE*Generator показывает продукты, для которых можно генерировать приложения. Позиционируйте курсор на CASE*Generator for SQL*Forms, version 3. Затем с помощью клавиши [Next Block] перейдите ко второй странице окна Use Preferences.6. Здесь следует задать только один параметр: TEMFRM, указывающий шаблон формы для генерации приложения в SQL[1]Forms. Для этого с помощью клавиши [Next Block] перейдите к блоку параметров окна. CASE*Generator выведет диалог, в котором следует ввести имя параметра TEMFRM и нажать клавишу [Next Field]. После этого CASE*Generator возвращается к окну, которое содержит некоторую дополнительную информацию. Здесь просто следует стереть поле Value и с помощью клавиши [Commit] сохранить изменения. Вернитесь в меню CASE*Generator /SQL*Forms.
7. Выберите пункт CASE*Generator/SQL*Forms/CASE*Generator Utilities/DDL Command Generator. При этом CASE*Generator запускает утилиту командной строки, которая запрашивает некоторую простую информацию, такую, как имя прикладной системы, номер ее версии и тип базы данных (наряду с Oracle можно генерировать приложения для DB2 фирмы IBM), а также тип генерируемого объекта (user означает генерацию таблиц, представлений, индексов, последовательностей и кластеров; dba — генерацию БД, табличных областей, сегментов отката, пользователей и полномочий) и имя выходного файла для DDL-сценария.
8. Если DDL-сценарий вас удовлетворяет, создайте в БД Oracle соответствующую схему, запустив DDL-сценарий из SQL*Plus или SQL*DBA.
9. Когда все необходимые структуры готовы, выберите пункт CASE*Generator/SQL*Forms/CASE*Generator for SQL*Forms-Generate. Далее введите имя модуля HAGGLE и нажмите клавишу [Commit]. CASE*Generator выводит окно с парой простых подсказок. В нем запрашивается количество строк, которые вы хотите выводить в каждом блоке формы.
Для блока SECJSS (эмиссия ЦБ) введите 1 (это означает вывод по одной записи о наименовании ЦБ), для блока SEC COU — 5.10. После ввода всей необходимой информации CASE*Generator автоматически создает приложение. После этого система запрашивает, хотите ли вы выполнить приложение. Выберите YES и система выведет окно приложения (рис. 12.27).
Генерация описания логической схемы БД и триггеров с помощью пакета Erwin. Продолжим рассмотрение примеров, приведенных в параграфах 11.2 и 12.1. Покажем, как с помощью пакета Erwin можно реализовать ссылочную целостность.
1. Выберите какую-либо связь (например, имеет), нажмите правую клавишу мыши и выберите пункт Referential Integrity. На экране появляется окно Referential Integrity. Здесь могут быть заданы требования к обработке операций INSERT, UPDATE, DELETE для родительской и дочерней сущности связи. Erwin предоставляет следующие варианты обработки:
• отсутствие проверки (NONE);
• проверка допустимости операции (RESTRICT);
• каскадное выполнение операции DELETE или UPDATE (CASCADE);
Рис. 12.27. Выходная форма программы «Результаты торгов» |
Выберите в верхнем списке Referential Integrity Туре тип триггера, шаблон которого вы желаете изменить. Затем в списке Built-in Trigger Template укажите на подходящий шаблон, в поле Template Name измените его имя, а в окне Template code модифицируйте, при необходимости, код выбранного шаблона. С помощью кнопки Add добавьте имя нового шаблона в окно User Override, затем с помощью кнопки Attach (второй слева) измените стандартный шаблон. При этом напротив стандартного имени триггера в окне Referential Integrity Туре появится новое имя (в списке Attached Trigger Template).
Чтобы с помощью пакета Erwin разработать хранимую процедуру, выполните следующие шаги.
1. Выберите какую-либо таблицу (процедуры в Erwin связываются с таблицами) на ЛС, щелкните правой клавишей мыши, выберите пункт ORACLE Table Property, а затем — пункт Stored Procedure.
На экране появляется окно ORACLE Table Property Editor.2. Нажмите кнопку SP Template. На экране появляется окно Table Stored Procedure Template Editor.
Введите в поле Name имя шаблона процедуры, нажмите кнопку New и в окне Stored Procedure Template введите код процедуры. Здесь можно использовать операторы макроязыка шаблонов. Нажмите кнопку ОК.
3. В окне ORACLE Table Property Editor в списке Unattached SP Template выберите имя шаблона процедуры и нажмите кнопку 4- Attach. При этом имя перемещается в список Attached SP Template. Нажмите кнопку ОК.
После выполнения всех требуемых.описаний можно создать модуль описания разработанной ЛС БД (DDL-описание). Для этого выберите пункт меню Server/Schema Generation. На экране появляется окно ORACLE Shema Generation Report.
Проверьте, чтобы были установлены все требуемые признаки генерации триггеров, таблиц, индексов и т.д. Чтобы посмотреть модуль описания ЛС БД, нажмите кнопку Preview. Ниже приведена распечатка этого модуля.
ORG (
CHAR(18) NOT NULL, CHAR(18) NULL, CHAR(IOO) NULL, CHAR(40) NULL, CHAR( 18) NULL, CHAR(120) NULL, CHAR(18) NULL, CHAR(18) NULL, CHAR(IOO) NULL
CREATE UNIQUE INDEX ХРКОрганизация ON SEC_ORG
(
SECORGl ASC
);
ALTER TABLE SEC_ORG
ADD (PRIMARY KEY (SEC_ORG_l));
ALTER TABLE SEC_CNT
ADD (FOREIGN KEY (SEC_CNT_1) REFERENCES SEC_ISS);
ALTER TABLE SEC_COU
ADD (FOREIGN KEY (COU_CODE_ISSUE) REFERENCES SECJSS);
ALTER TABLE SEC_COU
ADD (FOREIGN KEY (COU_CODE_ORG) REFERENCES SEC_GRO);
ALTER TABLE SECJSS
ADD (FOREIGN KEY (SECJSS_2) REFERENCES SEC_EMI);
ALTER TABLE SEC_OP
ADD (FOREIGN KEY (SEC_OP_2) REFERENCES SEC_CNT);
ALTER TABLE SEC_OP
ADD (FOREIGN KEY (SEC_OP_3) REFERENCES SEC_GRO);
create trigger tDSECCNT after DELETE on SECCNT for each row
- ERwin Builtin Fri Apr 04 12:41:25 1997 ~ DELETE trigger on SEC CNT declare numrows INTEGER;
begin
/* ERwin Builtin Fri Apr 04 12:41:25 1997 */
/* SEC CNT связан SEC_OP ON PARENT DELETE SET DEFAULT */
/* Application specific.
Left out intentionally. */- ERwin Builtin Fri Apr 04 12:41:25 1997 end;
/
create trigger tI SEC CNT after INSERT on SEC CNT for each row
- ERwin Builtin Fri Apr 04 12:41:25 1997 ~ INSERT trigger on SEC_CNT declare numrows INTEGER;
begin
/* ERwin Builtin Fri Apr 04 12:41:25 1997 */
/* SECISS создан SEC_CNT ON CHILD INSERT RESTRICT */ select count(*) into numrows from SEC ISS
where •
/* %JoinFKPK(:%New,SEC_ISS,» = «,» and») */ :new.SEC_CNT_l = SEC_ISS.SEC_ISS_1;
if (
/* %NotnullFK(:%New,» is not null and») */
numrows = 0
)
then
raise_application_error(
-20002,
’Cannot INSERT «SEC CNT» because «SEC ISS» does not exist.’
);
end if;
-- ERwin Builtin Fri Apr 04 12:41:25 1997 end;
/
create trigger tD SEC COU after DELETE on SEC COU for each row
- ERwin Builtin Fri Apr 04 12:41:25 1997
~ DELETE trigger on SECCOU declare numrows INTEGER; begin
/* ERwin Builtin Fri Apr 04 12:41:25 1997 */
/* SECISS имеет SEC_COU ON CHILD DELETE CASCADE */
delete from SEC ISS
where
/* %JoinFKPK(:%01d,SEC_ISS,» = «,» and») */
:old.COU_CODE_ISSUE = SEC_ISS.SEC_ISS_1;
- ERwin Builtin Fri Apr 04 12:41:25 1997 end;
/
create trigger tU SEC GRO after UPDATE on SECGRO for each row
- ERwin Builtin Fri Apr 04 12:41:25 1997 ~ UPDATE trigger on SEC GRO declare numrows INTEGER;
begin
/* ERwin Builtin Fri Apr 04 12:41:25 1997 */
/* SEC GRO определила SEC_COU ON PARENT UPDATE RESTRICT */ if
/* %JoinPKPK(:%01d,:%New,» о «,» or «) */
:old.SEC_PRO_l о :new.SEC_PRO_l
then
select count(*) into numrows
from SEC COU
where
/* %JoinFKPK(SEC_COU,:%01d,» = «,» and») */ SECCOU.COUCODEORG = :old.SEC_PRO_l; if (numrows > 0) then
raise_application_error(
-20005,
'Cannot UPDATE «SEC GRO» because «SEC COU» exists.
);
end if;
end if;
/* ERwin Builtin Fri Apr 04 12:41:25 1997 */
/* SEC GRO выполнила SEC_OP ON PARENT UPDATE CASCADE */ if
/* %JoinPKPK(:%01d,:%New,» о «,» or «) */ :old.SEC_PRO_l о :new.SEC_PRO_l
then
update SECOP set
/* %JoinFKPK(SEC_OP,:%New,» = «,»,») •/
SEC0P.SEC0P3 = :new.SEC_PRO_l where
/• %JoinFKPK(SEC_OP, :%01d,» = «,» and») */ SECOP.SECOP3 = :old.SEC_PRO_l;
end if;
- ERwin Builtin Fri Apr 04 12:41:25 1997 end;
/
create trigger tU SEC ISS after UPDATE on SECISS for each row
- ERwin Builtin Fri Apr 04 12:41:26 1997
- UPDATE trigger on SEC ISS declare numrows INTEGER; begin
/* ERwin Builtin Fri Apr 04 12:41:26 1997 */
/* SECEMI совершил SEC_ISS ON CHILD UPDATE SET NULL */
update SEC ISS
set
/* %SetFK(SEC_ISS,NULL) */
SECISS.SECISS2 = NULL
where not exists (
select * from SEC EMI where
/* %JoinFKPK(:%New,SEC_EMI,» = «,» and») */ :new.SEC_ISS_2 = SEC_EMI.SEC_EMI_1
) and
/* %JoinPKPK(SEC_ISS,:%New,» = «,» and») */ SECISS.SECISS1 = :new.SEC_ISS_l;
- ERwin Builtin Fri Apr 04 12:41:26 1997 end;
/
Еще по теме Пример генерации приложений с помощью CASE*Generator.:
- Приложение III МЕТАТЕОРЕТИЧЕСКИЙ КОНТЕКСТ ПСИХОЛОГИЧЕСКОЙ ПОМОЩИ
- Хислей Филипп. Генерация высококачественного кода для программ, написанных на СИ, 2010
- 1.9. Анализ случая (Case study)
- Примеры жестокости по отношению к другим (эти примеры более всего относятся к семейной жизни):
- ПРИЛОЖЕНИЯ
- Приложения
- ПРИЛОЖЕНИЕ
- Приложение
- Приложение 1.
- Приложение 3.
- Приложение 4.
- Приложение 5.