МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ»
Факультет
Информационных технологий
Кафедра
Информационных систем и технологий
Специальность
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;
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )