Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx56 / Курсовая_БД.docx
Скачиваний:
27
Добавлен:
01.08.2013
Размер:
85 Кб
Скачать
  1. Описание процедур и функций

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.

  1. Выводы о проделанной работе

В процессе разработки скриптов, необходимых для выполнения задания курсовой работы, были разработаны две таблицы: airplanes и flights, необходимые для хранения информации предметной области. При этом были учтены связи между таблицами. Также были разработаны пакеты, содержащие процедуры обработки данных; триггер, контролирующий время выхода фильма; и представление view, позволяющее пользователям БД просматривать информацию из связанных таблиц в формализованном и удобочитаемом виде.

В ходе выполнения данной курсовой работы я закрепила и улучшил навыки работы с СУДБ Oracle, полученные при выполнении лабораторных работ.

Литература

  1. Лекции по курсу «Сетевые базы данных»

  2. Oracle PL/SQL для профессионалов 3-е изд. / С. Фейерштейн, Б. Прибыл, - СПб.:Питер, 2004. – 941 с.

  3. Краткий справочник по Oracle7. http://www.codenet.ru/db/oracle/ora1/

  4. 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;

/

my_trigg.sql

CREATE OR REPLACE TRIGGER my_trigger

AFTER UPDATE of fid ON flights

DECLARE

nameu VARCHAR2(50);

BEGIN

dbms_output.put_line('We here.');

nameu := USER;

IF (nameu <> 'SYSTEM') THEN

INSERT INTO for_trigger VALUES(seq.nextval, nameu, TO_DATE(SYSDATE,'DD.MM.YYYY'));

END IF;

END;

my_view.sql

CREATE OR REPLACE VIEW my_view AS

SELECT airplanes.avialines, airplanes.acapacity AS airplanes, flights.fname, flights.fdata AS flights FROM flights, airplanes

WHERE flights.fid = airplanes.f_id;

SELECT * FROM my_view;

GRANT SELECT ON my_view TO PUBLIC;

grant.sql

CREATE OR REPLACE PROCEDURE changekey(num IN NUMBER, newkey IN NUMBER)

IS

BEGIN

pack2.changekey(num, newkey);

END changekey;

/

GRANT EXECUTE ON changekey TO SYSTEM;

Соседние файлы в папке docx56