Uploaded by Виталий Дядюк

Записка

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ»
Факультет
Информационных технологий
Кафедра
Информационных систем и технологий
Специальность
1-40 05 01 Информационные системы и технологии
Направление специальности 1-40 01 02 03 Информационные системы
и технологии (издательско-полиграфический комплекс)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
КУРСОВОГО ПРОЕКТА:
По дисциплине: «Администрирование баз данных и приложений»
Тема: Реализация базы данных «железнодорожный вокзал» с использованием
технологии шифрования и маскирования в БД
Исполнитель
Студент 3 курса группы 2
Дядюк В.А.
(Ф.И.О.)
Руководитель работы
ассистент Копыток Д. В.
(учен. степень, звание, должность, подпись, Ф.И.О.)
Курсовой проект защищен с оценкой
Председатель
(подпись)
Минск 2022г
Копыток Д. В.
2
Оглавление
Введение....................................................................................................................... 3
1 Постановка задачи ................................................................................................. 4
2 Разработка модели базы данных ......................................................................... 5
3 Разработка необходимых объектов ..................................................................... 6
4 Описание процедур импорта и экспорта ........................................................... 8
5 Тестирование производительности .................................................................... 9
6 Описание технологии и ее применения в базе данных ................................. 10
Заключение ............................................................................................................... 12
Cписок источников ................................................................................................. 13
Приложение А .......................................................................................................... 14
Приложение Б ........................................................................................................... 18
Приложение В ........................................................................................................... 20
3
Введение
В современном мире всё завязано на информации. Очень часто нам приходится
работать с различными данными, не важно, будь это телефонные номера, дела на
день, фотографии в смартфоне или что-либо ещё. Если это компьютерная игра, то
данными будут типы и местоположение врагов, их уровень здоровья, тип героя и так
далее. Если приложение для работы с клиентом, то мы имеем дело с данными по
типу имени клиента, его заказы, номер телефона и так далее. Для упрощения работы
с этими данными были созданы базы данных – это набор данных, организованных
каким-то способом. Например, если у вас в квартире есть гардеробная или кладовка,
то всё это помещение со всем её содержимым может считаться базой (но не данных,
а вещей или банок с огурцами, что не меняет сути)
Базы данных очень упрощают доступ к данным и имеют основные задачи,
такие как: cохранить наши данные по запросу, изменить наши данные по запросу,
найти эти данные по запросу, не дать прочитать эти данные тем, кому не следует, а
кому надо — дать. И так далее.
На сегодняшний день на рынке представлено множество технологий доступа
к данным и серверов баз данных, каждое, из которых имеет свои отличительные
черты. Современные приложения обработки данных ориентированы на работу с
большим количеством пользователей, на их удаленность от места расположения
основного сервера БД.
Темой данного курсового проекта является разработка программы
«железнодорожный вокзал». Пользователь «Театр» имеет доступ к таблицам в
базе данных и предназначен для взаимодействия с источником данных.
Взаимодействие подразумевает получение данных, их представление в
определенном формате для просмотра пользователем, редактирование в
соответствии с реализованными в программе бизнес-алгоритмами и возврат
обработанных данных обратно в базу данных.
4
1 Постановка задачи
Целью данной курсовой работы является создание программного обеспечения
для автоматизации процесса администрирования железнодорожной станции и
продажи билетов.
Задача проекта: совершенствование практических навыков в использовании и
разработке современных информационных систем, разработка архитектуры
приложения, Создание базы данных и интерфейса, выполнение тестирования
готового продукта.
Функционально должны быть выполнены следующие задачи:
˗ Отслеживание информации о локомотивах;
˗ регистрация новых пользователей в приложении;
˗ шифрование данных пользователя;
˗ поиск билетов по параметрам;
˗ анализ маршрутов.
Должны быть выполнены следующие требования:
 доступ к данным должен осуществляться только через соответствующие
процедуры;
 должен быть проведен импорт данных из XML файлов, экспорт данных в
формат XML;
 необходимо протестировать производительность базы данных на таблице,
содержащей не менее 100 000 строк, и внести изменения в структуру в случае
необходимости. Необходимо проанализировать планы запросов к таблице;
 применить технологию базы данных согласно выбранной теме: подробно
описать применяемые системные пакеты, утилиты или технологии; показать
применение указанной технологии в базе данных.
5
2 Разработка модели базы данных
Первым этапом курсовой работы будет создание логически взаимосвязанных
таблиц. Чтобы составить визуальную взаимосвязанную структуры нашей базы
данных, нам необходимо продумать, какая информация будет храниться в этих
таблицах, после этого создать связи с помощью первичных и внешних ключей.
Диаграмма базы данных, спроектированной в ходе разработки приложения
представлена на рисунке 2.1.
Рисунок 2.1 – Диаграмма базы данных
База данных состоит из следующих таблиц:
˗ билеты;
˗ рейсы;
˗ расписание;
˗ маршруты;
˗ категории маршрутов;
˗ локомотивы;
˗ вокзал;
˗ техническое обслуживание;
˗ бригады;
˗ отделы;
˗ работники;
˗ категории работников.
6
3 Разработка необходимых объектов
В ходе проектирования базы данных было создано 12 таблиц, связанных
между собой внешними ключами.
Таблица 3.1 – Столбцы таблицы Categories_of_workers
Наименование
Тип
Описание
ID_CATEGORY
number
идентификатор билета, первичный ключ
TITLE
char
описание
Таблица 3.2 – Столбцы таблицы Employees
Наименование
Тип
Описание
ID_EMPLOYEES
number
идентификатор места, первичный ключ
AGE
number
возраст
FULL_NAME
char
имя
EXPERIENCE
number
стаж
DEPARTMENT
number
отдел
Таблица 3.3 – Столбцы таблицы Department
Наименование
Тип
ID_DEPARTMENT
number
TITLE
nvarchar2(50)
Описание
идентификатор
название
Таблица 3.4 – Столбцы таблицы Brigade
Наименование
Тип
Описание
ID_BRIGADE
number
идентификатор афиши, первичный ключ
DEPARTMENT
number
отдел
TITLE
char
назание
Таблица 3.5 – Столбцы таблицы Locomotives
Наименование
Тип
ID_LOCOMOTIVES
number
LOCOMOTIV_BRIGADE
number
BRIGADE_OF_TECHNICIANS
number
LOCOMOTIV_AGE
number
Описание
идентификатор, первичный ключ
Локомотивная бригада
Бригада техников
Возраст локомотива
Таблица 3.6 – Столбцы таблицы TECHNICAL_INSPECTION
Наименование
Тип
Описание
ID_INSPECTION
number
идентификатор, первичный ключ
LOCOMOTIV
nvarchar2(50)
Id локомотива
Таблица 3.7 – Столбцы таблицы Station
Наименование
Тип
ID_STATION
number
TITLE
nvarchar2(50)
Описание
идентификатор, первичный ключ
название
7
Таблица 3.8 – Столбцы таблицы Route_Categories
Наименование
Тип
Описание
ID_ROUTE_CATEGORIES
number
идентификатор, первичный ключ
TITLE
Nvarchar2(50)
название
Таблица 3.9 – Столбцы таблицы Routes
Наименование
Тип
Описание
ID_ROUTES
number
идентификатор, первичный ключ
TITLE
Nvarchar2(50)
описание
CATEGORI
number
категория
DIRECTION
Nvarchar2(50)
идентификатор билета, внешний ключ для
связи с таблицей «Ticket»
Таблица 3.10 – Столбцы таблицы Timetable
Наименование
Тип
Описание
ID_TIMETABLE
number
идентификатор, первичный ключ
DURATIONN
Nvarchar2(50)
продолжительность
ROUTE
number
маршрут
LOCOMOTIV
number
локомотив
Таблица 3.11 – Столбцы таблицы Flights
Наименование
Тип
ID_FLIGHTS
number
CONDITION
Nvarchar2(50)
TIMETABL
number
DATEE
number
Описание
идентификатор, первичный ключ
свойства
расписания
Дата
Таблица 3.12 – Столбцы таблицы Tickets
Наименование
Тип
ID_TICKET
number
NAME_OF_THE_PASSENGER Nvarchar2(50)
gender
Nvarchar2(50)
FLIGHTS
number
Описание
идентификатор, первичный
ключ
Никнейм пользователя
гендер
Номер рейса
8
4 Описание процедур импорта и экспорта
XML — это формат данных, используемый для обмена данными в форме,
которая может быть легко использована и распространена. Часто возникает
необходимость импортировать и экспортировать XML-файлы в Oracle.
В данном курсовом проекте используются пакеты DBMS_XMLPARSER и
DBMS_XSLPROCESSOR для импорта XML, и DBMS_XMLDOM для экспорта
данных в XML формат. Для работы с файлами так же использовался пакет
DBMS_LOB. В данном курсовом проекте функции экспорта, импорта используются
для таблицы Post. Пример создания процедуры экспорта можно посмотреть на
рисунке 4.1.
Рисунок 4.1 – Процедура экспорта в XML файл
Для импорта данных использовались пакеты DBMS_XMLPARSER и
DBMS_XSLPROCESSOR.
9
5 Тестирование производительности
Для проверки производительности базы данных необходимо заполнить ее
большим количеством различных данных и узнать время выполнения одного
запроса.
Все сгенерированные данные были добавлены в один файл, в сумме всех
данных вышло 100 000 строк на одну таблицу. Для тестирования была взята
таблица Department, приведенная на рисунке 5.1.
Рисунок 5.1 – Проверка количества строк в таблице
Как видно на рисунке, изначально не был создан индекс и поэтому скорость
работы получилась 0,016. Но, если мы создадим индекс, то получим следующий
результат, представленный на рисунке 5.2.
Рисунок 5.2 – Скорость работы без индекса
Как было замечено, скорость работы увеличилась в несколько раз.
10
6 Описание технологии и ее применения в базе данных
В процессе разработки проекта была разработана технология: шифрование и
маскирование.
Для шифрования использовался пакет DBMS_CRYPTO.
Пакет DBMS_CRYPTO появился в Oracle10g. В более ранних версиях пакет
DBMS_OBFUSCATION_TOOLKIT предоставлял похожую (но не идентичную)
функциональность. Старый пакет все еще остается доступным, но сейчас он
считается устаревшим, и вместо него рекомендуется использовать новый пакет.
Вспомните, что для выполнения шифрования кроме входных данных
необходимы еще четыре компонента:
˗ Ключ шифрования
˗ Алгоритм шифрования
˗ Метод заполнения
˗ Метод сцепления
Ключ шифрования предоставляет пользователь, а остальные компоненты
предоставляет Oracle. Выбор осуществляется при помощи соответствующих
констант пакета DBMS_CRYPTO.
Для реализации шифрования данных в базе данных была реализована
функция DESEncrypt. Листинг данной функции представлен на листинге 6.1.
CREATE OR REPLACE FUNCTION DESEncrypt(Data CLOB)
RETURN RAW DETERMINISTIC
IS
EncryptionType PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
EncryptionKey RAW(256) :=
UTL_RAW.CAST_TO_RAW('AAAAC3NzaC1lZDI1NTE5AAAAILn2AbJgiqCZgSdQ
9w/f71M1YXcEffd3962cPzsj2nL7');
BEGIN
RETURN DBMS_CRYPTO.ENCRYPT(
SRC => UTL_RAW.CAST_TO_RAW(Data),
TYP => EncryptionType,
KEY => EncryptionKey
11
);
END;
Листинг 6.1 – Функция шифрования данных
Для дешифрования данных в базе данных была реализована функция
DESDecrypt. Листинг данной функции представлен на листинге 6.2.
CREATE OR REPLACE FUNCTION DESDecrypt(Data RAW)
RETURN CLOB DETERMINISTIC
IS
EncryptionType PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
EncryptionKey RAW (256) :=
UTL_RAW.CAST_TO_RAW('AAAAC3NzaC1lZDI1NTE5AAAAILn2AbJgiqCZgSdQ
9w/f71M1YXcEffd3962cPzsj2nL7');
BEGIN
RETURN UTL_RAW.CAST_TO_VARCHAR2(DBMS_CRYPTO.Decrypt(
SRC => Data,
TYP => EncryptionType,
KEY => EncryptionKey
));
END;
Листинг 6.2 – Функция дешифрования данных
12
Заключение
В процессе решения задачи была достигнута поставленная нами цель по
созданию базы данных для автоматизированной системы «железнодорожная
станция». При разработке курсового проекта использовались объекты: таблицы,
хранимые процедуры, индексы, последовательности, пакеты.
Основной целью курсового проекта стало проектирование базы данных для
дальнейшей интеграции с приложением, которое поможет облегчить
взаимодействие с базой данных посредством программного интерфейса.
Взаимодействие между приложением и базой данных будет реализовано с помощью
технологии ADO.NET. При разработке выполнены следующие пункты:
˗ разработка приложения для взаимодействия с БД;
˗ возможность заказать билет;
˗ возможность поиска билета;
˗ возможность регистрации новых пользователей;
˗ шифрование данных пользователя;
˗ отправка билета по почте.
БД прошло тестирование при использовании большого количество данных.
Также были реализованы процедуры для импорта, экспорта данных в формат XML.
Была реализована технология «Шифрование и маскирование». Шифрование
данных было реализовано с помощью пакета DBMS_CRYPTO.
В соответствии с полученным результатом работы программы можно сделать
вывод, что разработанная программа работает верно, а требования технического
задания выполнены в полном объёме.
13
Cписок источников
1 Язык C# и .NET Framework [Электронный ресурс] –
http://professorweb.ru/my/csharp/charp_theory/level1/infonet.php.
2 Руководство по ADO.NET и работе с базами данных [Электронный
ресурс] – https://metanit.com/sharp/adonet/.
3 Документация Oracle [Электронный ресурс] / Foundation, Inc.
https://docs.oracle.com/cd/B28359_01/server.111/b31222/toc.htm
4 Официальный сайт Oracle [Электронный ресурс] / Foundation, Inc.
https://www.oracle.com/database/database-vault/index.html
5 Продукты Oracle [Электронный ресурс] [Электронный ресурс] /
Foundation, Inc. http://www.interface.ru/home.asp?artId=24678
6 Документы Oracle [Электронный ресурс] / Foundation, Inc.
http://www.oracle.com/technetwork/database/security/database-vault-ds-12c1898877.pdf
14
Приложение А
//Создание таблиц
create table Categories_of_workers (
ID_CATEGORY integer generated always as identity,
TITLE varchar(100),
primary key (ID_CATEGORY)
);
create table Employees (
ID_EMPLOYEES integer generated always as identity primary key,
FULL_NAME varchar(100),
AGE NUMBER,
GENDER varchar(3),
EXPERIENCE NUMBER,
DEPARTMENT INTEGER,
BRIGADE INTEGER,
SALARY INTEGER,
CATEGORIES INTEGER,
FOREIGN KEY (DEPARTMENT) REFERENCES Department(ID_DEPARTMENT),
FOREIGN KEY (BRIGADE) REFERENCES Brigade(ID_BRIGADE),
FOREIGN KEY (CATEGORIES) REFERENCES Categories_of_workers(ID_CATEGORY)
);
create table Department (
ID_DEPARTMENT integer generated always as identity primary key,
TITLE varchar(100)
);
create table Brigade (
ID_BRIGADE integer generated always as identity primary key,
DEPARTMENT integer,
TITLE varchar(100),
FOREIGN KEY (DEPARTMENT) REFERENCES Department(ID_DEPARTMENT)
);
15
create table Locomotives (
ID_LOCOMOTIVES integer generated always as identity primary key,
LOCOMOTIV_BRIGADE integer,
BRIGADE_OF_TECHNICIANS integer,
LOCOMOTIV_AGE number,
SNAP_STATION integer,
FOREIGN KEY (LOCOMOTIV_BRIGADE) REFERENCES Brigade(ID_BRIGADE),
FOREIGN KEY (BRIGADE_OF_TECHNICIANS) REFERENCES Brigade(ID_BRIGADE),
FOREIGN KEY (SNAP_STATION) REFERENCES Station(ID_STATION)
);
create table TECHNICAL_INSPECTION (
ID_INSPECTION integer generated always as identity primary key,
LOCOMOTIV integer,
DATE_START date,
DATE_FINISH date,
FOREIGN KEY (LOCOMOTIV) REFERENCES Locomotives(ID_LOCOMOTIVES)
);
create table Station (
ID_STATION integer generated always as identity primary key,
TITLE varchar(100)
);
create table Route_Categories (
ID_ROUTE_CATEGORIES integer generated always as identity primary key,
TITLE varchar(100)
);
create table Routes (
ID_ROUTES integer generated always as identity primary key,
TITLE varchar(100),
CATEGORI integer,
DIRECTION varchar(100),
16
FOREIGN KEY (CATEGORI) REFERENCES
Route_Categories(ID_ROUTE_CATEGORIES)
);
create table Timetable (
ID_TIMETABLE integer generated always as identity primary key,
ROUTE integer,
DURATIONN varchar(10),
LOCOMOTIV integer,
SCHEDULED_DEPARTURE varchar(10),
SCHEDULED_ARRIVAL varchar(10),
COSTT number,
FOREIGN KEY (LOCOMOTIV) REFERENCES Locomotives(ID_LOCOMOTIVES),
FOREIGN KEY (ROUTE) REFERENCES Routes(ID_ROUTES)
);
create table Flights (
ID_FLIGHTS integer generated always as identity primary key,
TIMETABL integer,
DATEE date,
ACTUAL_DEPARTURE date,
ACTUAL_ARRIVAL date,
CONDITION varchar(100),
NUMBER_OF_TICKETS integer,
UNREDUCED_TICKETS integer,
NUMBER_OF_TICKETS_GIVEN integer,
ARRIVAL_STATION integer,
DEPARTURE_STATION integer,
FOREIGN KEY (TIMETABL) REFERENCES Timetable(ID_TIMETABLE),
FOREIGN KEY (ARRIVAL_STATION) REFERENCES Station(ID_STATION),
FOREIGN KEY (DEPARTURE_STATION) REFERENCES Station(ID_STATION)
);
alter table Flights modify ACTUAL_ARRIVAL date
create table Tickets (
17
ID_TICKET integer generated always as identity primary key,
DATE_OF_SALE varchar(100),
FLIGHTS integer,
CARRIAGE integer,
PLACE integer,
NAME_OF_THE_PASSENGER varchar(100),
AGE integer,
gender varchar(10),
FOREIGN KEY (FLIGHTS) REFERENCES Flights(ID_FLIGHTS)
);
18
Приложение Б
--Export/Import XML
Create or replace Directory EXPORTFILE
AS
'C:\\xml';
declare
xml_clob clob;
begin
select dbms_xmlgen.getxml('select * from locomotives') into
xml_clob from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(cl
=>
xml_clob,
flocation
=>
'EXPORTFILE', fname => 'locomotives.xml');
end;
declare
xml_clob clob;
begin
select dbms_xmlgen.getxml('select * from routes') into xml_clob
from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(cl
=>
xml_clob,
flocation
=>
'EXPORTFILE', fname => 'routes.xml');
end;
declare
xml_clob clob;
begin
select dbms_xmlgen.getxml('select * from station') into xml_clob
from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(cl
=>
xml_clob,
flocation
=>
'EXPORTFILE', fname => 'station.xml');
end;
declare
xml_clob clob;
begin
select dbms_xmlgen.getxml('select * from timetable') into xml_clob
from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(cl
=>
xml_clob,
flocation
=>
'EXPORTFILE', fname => 'timetable.xml');
end;
declare
xml_clob clob;
begin
select dbms_xmlgen.getxml('select * from Pasangers') into xml_clob
from dual;
DBMS_XSLPROCESSOR.CLOB2FILE(cl
=>
xml_clob,
flocation
=>
'EXPORTFILE', fname => 'Pasangers.xml');
19
end;
--------------------------------------------------------------------import
INSERT INTO Pasangers SELECT x.*
FROM (SELECT XMLTYPE(bfilename('EXPORTFILE',
nls_charset_id('UTF8')) xml_data FROM dual),
XMLTABLE('/ROWSET/ROW' PASSING xml_data
columns ID_PAS integer path 'ID_PAS',
First_Name varchar(100) path 'First_Name') x;
select * from Pasangers;
'Pasangers.xml'),
20
Приложение В
CREATE OR REPLACE FUNCTION DESEncrypt(Data CLOB)
RETURN RAW DETERMINISTIC
IS
EncryptionType PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
EncryptionKey
RAW(256)
:=
UTL_RAW.CAST_TO_RAW('AAAAC3NzaC1lZDI1NTE5AAAAILn2AbJgiqCZgSdQ9w/f71M1Y
XcEffd3962cPzsj2nL7');
BEGIN
RETURN DBMS_CRYPTO.ENCRYPT(
SRC => UTL_RAW.CAST_TO_RAW(Data),
TYP => EncryptionType,
KEY => EncryptionKey
);
END;
SELECT DESEncrypt('DATA') FROM DUAL;
---1
create or replace procedure select_train_driver(p_categ
employees.categories%type)
is
fname varchar(100);
cou number;
cursor get_names is
select full_name from employees where categories = p_categ;
begin
open get_names;
loop
exit when get_names%NOTFOUND;
fetch get_names into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_names;
select count(full_name)
categories = p_categ;
DBMS_OUTPUT.put_line(cou);
commit;
end;
declare
begin
select_train_driver(22);
end;
into
cou
from
employees
in
where
21
select * from employees
---2
create or replace procedure select_empl_in_brigade(p_brigade in
employees.brigade%type)
is
fname varchar(100);
cou number;
cursor get_names is
select full_name from employees where brigade = p_brigade;
begin
open get_names;
loop
exit when get_names%NOTFOUND;
fetch get_names into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_names;
select count(full_name)
brigade = p_brigade;
into
cou
from
employees
where
DBMS_OUTPUT.put_line('count : '||cou);
commit;
end;
declare
begin
select_empl_in_brigade(1);
end;
---3
create
or
replace
procedure
loc_with_st(p_time
in
flights.ACTUAL_ARRIVAL%type, p_station in station.id_station%type)
is
loc integer;
cursor get_loc is
select id_locomotives from locomotives
inner join timetable on locomotiv = locomotives.id_locomotives
inner join flights on flights.timetabl = timetable.id_timetable
and
locomotives.snap_station=p_station
and
((arrival_station=p_station and
trunc(p_time,'HH24')>trunc(flights.ACTUAL_ARRIVAL,'HH24'))
or
(departure_station=p_station
and
trunc(p_time,'HH24')<trunc(flights.ACTUAL_DEPARTURE,'HH24')))
group by id_locomotives;
begin
open get_loc;
loop
exit when get_loc%NOTFOUND;
22
fetch get_loc into loc;
DBMS_OUTPUT.put_line(loc);
end loop;
close get_loc;
commit;
end;
declare
begin
loc_with_st(to_date('11/12/2002
HH24:MI:SS'), 1);
end;
21:00:00','MM/DD/YYYY
select * from timetable;
select * from locomotives;
select * from flights;
--4
create
or
replace
procedure
technical_insp(p_time
in
technical_inspection.date_start%type)
is
fname varchar(100);
cursor get_loc is
select
locomotiv
from
technical_inspection
where
p_time>technical_inspection.date_start
and
p_time<technical_inspection.date_finish;
begin
open get_loc;
loop
exit when get_loc%NOTFOUND;
fetch get_loc into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_loc;
end;
declare
begin
technical_insp(to_date('11/12/2002
HH24:MI:SS'));
end;
19:00:00','MM/DD/YYYY
--5
create or replace procedure inf_from_timetable(p_time_from in
technical_inspection.date_start%type,p_time_to
in
technical_inspection.date_start%type)
is
fname varchar(100);
cursor get_loc is
select locomotiv from timetable
inner join flights on timetable.id_timetable = flights.timetabl
and
trunc(p_time_from,'HH24')>trunc(flights.ACTUAL_DEPARTURE,'HH24')
23
and trunc(p_time_to,'HH24')<trunc(flights.ACTUAL_ARRIVAL,'HH24');
begin
open get_loc;
loop
exit when get_loc%NOTFOUND;
fetch get_loc into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_loc;
end;
declare
begin
inf_from_timetable(to_date('11/12/2002
13:00:00','MM/DD/YYYY
HH24:MI:SS'),to_date('11/12/2002 14:00:00','MM/DD/YYYY HH24:MI:SS'));
end;
--6
create or replace procedure inf_from_timetable(p_cost_min in
timetable.costt%type, p_cost_max in timetable.costt%type)
is
fname varchar(100);
cursor get_loc is
select locomotiv from timetable where costt>p_cost_min and
costt<p_cost_max;
begin
open get_loc;
loop
exit when get_loc%NOTFOUND;
fetch get_loc into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_loc;
end;
declare
begin
inf_from_timetable(100,150);
end;
--7
create or replace procedure inf_from_timetable(p_cost_min in
timetable.costt%type, p_cost_max in timetable.costt%type)
is
fname varchar(100);
cursor get_loc is
select locomotiv from timetable where costt>p_cost_min and
costt<p_cost_max;
begin
open get_loc;
loop
exit when get_loc%NOTFOUND;
fetch get_loc into fname;
24
DBMS_OUTPUT.put_line(fname);
end loop;
close get_loc;
end;
declare
begin
inf_from_timetable(100,150);
end;
--8
create
or
replace
procedure
inf_from_flights(p_status
flights.condition%type)
is
fname varchar(100);
cursor get_flight is
select id_flights from flights where p_status=condition;
begin
open get_flight;
loop
exit when get_flight%NOTFOUND;
fetch get_flight into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_flight;
end;
in
declare
begin
inf_from_flights('test');
end;
--9
create
or
replace
procedure
inf_from_flights(p_id
in
flights.ID_FLIGHTS%type)
is
allTic varchar(100);
unreduced varchar(100);
given varchar(100);
begin
select
NUMBER_OF_TICKETS,
UNREDUCED_TICKETS,
NUMBER_OF_TICKETS_GIVEN into allTic, unreduced, given from flights
where id_flights = p_id;
DBMS_OUTPUT.put_line('All : '||alltic);
DBMS_OUTPUT.put_line('Unredused : '||unreduced);
DBMS_OUTPUT.put_line('Given : '||given);
end;
declare
begin
inf_from_flights(21);
end;
25
--10
create
or
replace
procedure
select_pasanger(p_id
in
tickets.flights%type,
p_age
in
tickets.age%type,
p_gender
in
tickets.gender%type)
is
fname varchar(100);
cou number;
cursor get_names is
select NAME_OF_THE_PASSENGER from tickets where flights=p_id and
age=p_age and gender=p_gender;
begin
open get_names;
loop
exit when get_names%NOTFOUND;
fetch get_names into fname;
DBMS_OUTPUT.put_line(fname);
end loop;
close get_names;
select count(NAME_OF_THE_PASSENGER) into cou from tickets
where flights=p_id and age=p_age and gender=p_gender;
DBMS_OUTPUT.put_line('count : '||cou);
commit;
end;
declare
begin
select_pasanger(1,10,'m');
end;
Download