
Выполнение программ.
Для написания программ использовался интегрированная компонента продуктов
ORACLE, процедурное расширение языка SQL - язык PL/SQL. (PL - Procedural
Language - процедурный язык.) PL/SQL - язык четвертого поколения, объединяющий
структурированные элементы процедурного языка программирования с языком SQL.
Язык PL/SQL разработан специально для организации вычислений в среде
клиент/сервер. Он позволяет передать на сервер программный блок PL/SQL,
содержащий логику приложения, как оператор SQL, одним запросом. Используя
PL/SQL, можно значительно уменьшить объем обработки в клиентской части
приложения и нагрузку на сеть. PL/SQL способствует ускорению разработки и
улучшению эффективности серверной части приложений. Конечно язык PL/SQL не
является в такой же степени многофункциональным, как языки C или Java. Однако
в рамках данной работы я считаю, что заложенных в нем функций практически
полностью хватает для выполнения необходимых операций.
Программа, которая создает тестовую базу данных.
Для проведения экспериментов, как уже упоминалось раньше, была разработана
тестовая база данных. Для запуска программы в среде SQL*Plus надо выполнить команду:
@A:\DB\crdb_tb.sql
@A:\DB\crdb_tbend.sql
@A:\CRDBPR#\crdb#.sql
@A:\CRDBPR#\crdbpr_end#.sql
CREATE FUNCTION pr_serv ( pr_num_serv IN INTEGER,
num_gen IN INTEGER )
RETURN INTEGER IS
pr_id_serv INTEGER;
pr_name_serv r_str%ROWTYPE;
pr_describe r_str%ROWTYPE;
pr_cost r_gen%ROWTYPE;
pr_duration r_gen%ROWTYPE;
n_gen INTEGER;
BEGIN
n_gen := num_gen;
LOOP
SELECT serv_seq.NEXTVAL
INTO pr_id_serv
FROM dual;
pr_name_serv := random_str(9999999999,2,n_gen);
pr_describe := random_str(9999999999,4,pr_name_serv.v1);
pr_cost := random_gen(99999,pr_describe.v1);
pr_duration := random_gen(999,pr_cost.v1);
n_gen := pr_duration.v1;
INSERT INTO service
VALUES(pr_id_serv,pr_name_serv.v2,pr_describe.v2,
pr_cost.v2,pr_duration.v2);
IF MOD(pr_id_serv,10000) = 0 THEN COMMIT;
END IF;
EXIT WHEN pr_id_serv >= pr_num_serv;
END LOOP;
COMMIT;
RETURN n_gen;
END pr_serv;
Пример функции из второй программы.
CREATE FUNCTION pr_serv ( pr_num_serv IN INTEGER,
pr_ni_serv IN INTEGER,
num_gen IN INTEGER )
RETURN INTEGER IS
pr_id_serv INTEGER;
pr_name_serv r_str%ROWTYPE;
pr_describe r_str%ROWTYPE;
pr_cost r_gen%ROWTYPE;
pr_duration r_gen%ROWTYPE;
n_gen INTEGER;
TYPE type_id_serv IS TABLE OF service.id_serv%TYPE
INDEX BY BINARY_INTEGER;
TYPE type_name_serv IS TABLE OF service.name_serv%TYPE
INDEX BY BINARY_INTEGER;
TYPE type_describe IS TABLE OF service.describe%TYPE
INDEX BY BINARY_INTEGER;
TYPE type_cost IS TABLE OF service.cost%TYPE
INDEX BY BINARY_INTEGER;
TYPE type_duration IS TABLE OF service.duration%TYPE
INDEX BY BINARY_INTEGER;
serv_id_serv type_id_serv;
serv_name_serv type_name_serv;
serv_describe type_describe;
serv_cost type_cost;
serv_duration type_duration;
BEGIN
n_gen := num_gen;
FOR i IN 1 .. pr_num_serv
LOOP
pr_name_serv := random_str(9999999999,2,n_gen);
pr_describe := random_str(9999999999,4,pr_name_serv.v1);
pr_cost := random_gen(99999,pr_describe.v1);
pr_duration := random_gen(999,pr_cost.v1);
n_gen := pr_duration.v1;
serv_id_serv(i) := pr_ni_serv + i;
serv_name_serv(i) := pr_name_serv.v2;
serv_describe(i) := pr_describe.v2;
serv_cost(i) := pr_cost.v2;
serv_duration(i) := pr_duration.v2;
END LOOP;
FORALL i IN 1 .. pr_num_serv
INSERT INTO service
VALUES(serv_id_serv(i),serv_name_serv(i),serv_describe(i),
serv_cost(i),serv_duration(i));
COMMIT;
RETURN n_gen;
END pr_serv;
