<<
>>

Пример генерации приложений с помощью CASE*Generator.

Продолжим рассмотрение примеров, приведенных в параграфах 10.3, 11.2 и

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;

/

<< | >>
Источник: Григорьев Ю.А., Ревунков Г.И.. Банки данных. 2002

Еще по теме Пример генерации приложений с помощью CASE*Generator.:

  1. Приложение III МЕТАТЕОРЕТИЧЕСКИЙ КОНТЕКСТ ПСИХОЛОГИЧЕСКОЙ ПОМОЩИ
  2. Хислей Филипп. Генерация высококачественного кода для программ, написанных на СИ, 2010
  3. 1.9. Анализ случая (Case study)
  4. Примеры жестокости по отношению к другим (эти примеры более всего относятся к семейной жизни):
  5. ПРИЛОЖЕНИЯ
  6. Приложения
  7. ПРИЛОЖЕНИЕ
  8. Приложение
  9. Приложение 1.
  10. Приложение 3.
  11. Приложение 4.
  12. Приложение 5.