- •Курсовая работа
- •Содержание
- •Постановка задачи
- •Структура данных
- •3. Скрипт создания таблиц (create_tables.Sql)
- •3.1 Скрипт create_table.Sql
- •4. Скрипт pack1
- •Описание процедур и функций
- •6. Предоставление привилегий (grants.Sql)
- •Выводы о проделанной работе
- •Литература
- •Приложение a. Листинги файлов paсk2.Sql
- •My_trigg.Sql
- •My_view.Sql
Описание процедур и функций
PROCEDURE changekey(num IN NUMBER, newkey IN NUMBER -Процедура должна изменять первичный ключ рейса. В процедуру передается номер рейса, по которому необходимо искать, и новый первичный ключ.
FUNCTION maxplane(fly IN NUMBER) RETURN NUMBER - функция , которая возвращает самолет с максимальной вместимостью для рейса, переданного как параметр.
PROCEDURE eachplane - процедура , которая выводит на экран для каждого рейса самолет,возвращаемый функцией..
6. Предоставление привилегий (grants.Sql)
Согласно заданию, требуется выдать право на использование представления всем пользователям; на использование процедуры changekey– только конкретному пользователю.
Однако процедура changekeyнаходится внутри пакета Pack_2, и нет возможности выдать право на ее запуск (можно лишь выдать привилегии на использование всего пакета, что недопустимо), а, следовательно, потребуется создать самостоятельную процедуру-обертку, которая будет запускать процедуруchangekeyиз пакета. На запуск этой процедуры предоставим привилегии пользователюSYSTEM.
Выводы о проделанной работе
В процессе разработки скриптов, необходимых для выполнения задания курсовой работы, были разработаны две таблицы: airplanesиflights, необходимые для хранения информации предметной области. При этом были учтены связи между таблицами. Также были разработаны пакеты, содержащие процедуры обработки данных; триггер, контролирующий время выхода фильма; и представление view, позволяющее пользователям БД просматривать информацию из связанных таблиц в формализованном и удобочитаемом виде.
В ходе выполнения данной курсовой работы я закрепила и улучшил навыки работы с СУДБ Oracle, полученные при выполнении лабораторных работ.
Литература
Лекции по курсу «Сетевые базы данных»
Oracle PL/SQL для профессионалов 3-е изд. / С. Фейерштейн, Б. Прибыл, - СПб.:Питер, 2004. – 941 с.
Краткий справочник по Oracle7. http://www.codenet.ru/db/oracle/ora1/
Oracle Database SQL Reference 10g Release 2 (10.2). http://docs.oracle.com/cd/B19306_01/server.102/b14200/index.htm
Приложение a. Листинги файлов paсk2.Sql
CREATE OR REPLACE PACKAGE pack2 IS
PROCEDURE changekey(num IN NUMBER, newkey IN NUMBER);
FUNCTION maxplane(fly IN NUMBER) RETURN NUMBER;
PROCEDURE eachplane;
END pack2;
/
CREATE OR REPLACE PACKAGE BODY pack2 IS
PROCEDURE changekey(num IN NUMBER, newkey IN NUMBER) IS
fnumber NUMBER;
abc NUMBER;
found_err EXCEPTION;
BEGIN
UPDATE flights SET fid = newkey WHERE fnum = num;
IF SQL%NOTFOUND THEN raise found_err; END IF;
DBMS_OUTPUT.PUT_LINE('New primary key for fligth #' || num || ' is ' || newkey);
COMMIT;
EXCEPTION
WHEN found_err THEN
DBMS_OUTPUT.PUT_LINE('Flight not found.');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Error: No Data Found.');
END;
FUNCTION maxplane(fly IN NUMBER) RETURN NUMBER IS
ret NUMBER(4);
found_err2 EXCEPTION;
BEGIN
SELECT MAX(acapacity) INTO ret FROM airplanes
WHERE airplanes.f_id = fly;
IF SQL%NOTFOUND THEN raise found_err2; END IF;
RETURN ret;
EXCEPTION
WHEN found_err2 THEN
DBMS_OUTPUT.PUT_LINE('Flight not found.');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Error: No Data Found.');
END;
PROCEDURE eachplane IS
plane NUMBER;
num NUMBER;
retnum NUMBER;
CURSOR curf IS
SELECT fid, fnum from flights;
BEGIN
OPEN curf;
LOOP
FETCH curf INTO plane, num;
EXIT WHEN curf%NOTFOUND;
retnum := pack2.maxplane(plane);
IF (retnum > 0) THEN
dbms_output.put_line('For fligth #' || num || ' airplane -> ' || retnum);
ELSE
dbms_output.put_line('Not found airplane for fligth #' || num);
END IF;
END LOOP;
CLOSE curf;
END;
END pack2;
/
BEGIN
pack1.clear_tables;
pack1.fill_tables;
pack2.eachplane;
pack2.changekey(201,11);
END;
/