Вы находитесь на странице: 1из 42

Федеральное агентство по рыболовству

Федеральное государственное бюджетное образовательное


учреждение высшего образования
«Астраханский государственный технический университет»
Система менеджмента качества в области образования, воспитания, науки и инноваций сертифицирована
DQS по международному стандарту ISO 9001:2015

Институт информационных технологий и коммуникаций

Кафедра «Информационная безопасность»

Методические указания
по выполнению лабораторных работ

БЕЗОПАСНОСТЬ СИСТЕМ БАЗ ДАННЫХ

10.03.01 Информационная безопасность

Астрахань 2022
Автор(ы):Космачева И.М.

Рецензент: Белов С.В.

Методические указания по выполнению лабораторных работ по дисциплине


«Безопасность систем баз данных» утверждены на заседании кафедры «Информационная
безопасность» «31 » августа 2022 г., протокол № 7 .

© Астраханский государственный технический университет

2
План тем на лабораторных занятиях

Тема по РП Лабораторная
СУБД Oracle: основные возможности. Лабораторная работа № 1 СУБД Oracle:
Установка и деинсталляция, основные возможности. Установка и
настройка. Работа с SQL Plus. деинсталляция, настройка. Работа с SQL
Создание БД c помощью графических Plus. Создание БД c помощью
утилит. Настройка параметров работы графических утилит. Настройка
экземпляра, кодировок, переменных параметров работы экземпляра.
среды.
Проектирование БД. Операторы DDL. Лабораторная работа № 2.
Создание таблиц в СУБД ORACLE. Проектирование БД. Операторы DDL.
Ограничения целостности. Изменения Создание таблиц в СУБД ORACLE.
в структуре таблицы. Команда Alter. Ограничения целостности. Изменения в
структуре таблицы. Команды языка
определения данных. Команда Alter.
Команды языка манипулирования
данными.
Реляционная алгебра. Реляционные Лабораторная работа № 3. Реляционная
операторы и SQL-операторы. алгебра. Реляционные операторы и SQL-
Реализация реляционной алгебры операторы. Реализация реляционной
средствами SQL. /Лаб/ алгебры средствами SQL. Формирование
запросов для выборки данных.
Формирование запросов для выборки Лабораторная работа № 4. Команды
данных с применением встроенных INSERT, UPDATE, DELETE.
функций и предикатов Формирование запросов для выборки
данных с применением встроенных
функций и предикатов.
Изучение PL/SQL. Типы данных. Лабораторная работа № 5. Изучение
Создание процедур, функций, пакетов. PL/SQL. Типы данных. Хранимые
процедуры, функции, блоки PL/SQL,
пакеты, триггеры.
Лабораторная работа № 6. Изучение
PL/SQL. Типы данных. Элементы
программирования на языке PL/SQL.
СУБД Oracle: основные возможности. Лабораторная работа № 7.
Установка и деинсталляция, Параллельная обработка данных.
настройка. Работа с SQL Plus. Со- Средства защиты информации.
здание БД c помощью графических
утилит. Настройка параметров работы
экземпляра, кодировок, переменных
среды. /Лаб/

3
Лабораторная работа № 1 СУБД Oracle: основные возможности. Установка и
деинсталляция, настройка. Работа с SQL Plus. Создание БД c помощью графических
утилит. Настройка параметров работы экземпляра.

Цель лабораторной работы:


1. Изучить особенности установки СУБД Oracle.
2. Изучить процедуры деинсталляция, настройки работы экземпляра БД, создания БД c
помощью графических утилит.
3. Освоить работу в среде SQL*Plus. Знать команды по настройке удобочитаемого
отображения данных на экране.

Задание.
1. Зайти в приложение SQLplus, введя в приглашении логин с указанием логина
(администратор с привилегией) - sys as sysdba. Пароль не вводится, нажать на клавишу
Enter (т.к. действует аутентификация на уровне ОС, эту настройку лучше потом изменить,
тогда будет требоваться пароль при подключении как у всех пользователей )
Включить запись протокола (запись в текстовый файл всех действий пользователя –
выполняемые команды и их результат).

Sql>Spool d:\log.txt; --Проверьте, что файл появился в папке.

….

Spool off;

Если позже надо открыть протокол на дозапись в тот же файл (с сохранением, а не


перезаписью содержимого), то выполнить команду:

Sql> Spool d:\log.txt append;



Sql> Spool off;

2. Продемонстрировать создание БД через графическую утилиту Database Assistent.


3. Настроить кодировку для отображения кириллицы на экране при работе с БД в
SQL*Plus.

Проблемы некорректных сообщений возникают из-за несовпадения кодировок


консоли и программ, которые выводят сообщения на консоль. Внутри базы Oracle хранит
символы в двоичном формате в кодировке, заданной при создании БД командой CREATE
DATABASE. Консоль по умолчанию выводит всё в кодировке DOS 866 (ru8pc866), а
скрипты - это обычно текстовые файлы в кодировке MS WIN 1251.
Кодировка сообщений SQLPLUS зависит от переменной NLS_LANG.
NLS_LANG: Определяет первоначальные настройки поддержки национальных языков
(National Language Support - NLS) для сессий подключений в форме
language_territory.characterset, например: RUSSIAN_RUSSIA.CL8MSWIN1251.
• Т.е. сессия соединения БД будет использовать русский язык для сообщений Oracle,
сортировки по алфавиту, названий дней недели и месяцев (часть language -
RUSSIAN).
• Территория – Россия, что устанавливает формат времени, даты, числовых и
денежных значений (часть territory – RUSSIA).

4
• Кодировка CL8MSWIN1251 говорит программе Oracle Net о том, что необходимо
конвертировать символьную информацию в эту кодировку. В Windows ее можно
установить и как переменную окружения, и в реестре в разделе, соответствующем
Oracle home.

Переменную NLS_LANG можно задавать тремя способами:


а)(глобально) (по умолчанию) В реестре в HKEY_LOCAL_MACHINE\SOFTWARE\
ORACLE.
б) (супер глобально) Задать как переменную окружения в ОС. Такая установка
перекрывает переменную в реестре.
в) (локально) Для конкретной сессии в консоли командой set.

А далее вызываем из консоли приложение: sqlplus

4. Продемонстрировать работу основных команд в SQL*Plus по настройке


удобочитаемого отображения данных и передаче данных c кириллицей на экран при
работе с основными функциям (sysdate и др.) и таблицей dual.

Выполните команды:
 Spool d:\log.txt append;
 Select sysdate, 5+8, ‘Hi’,’Привет’ from dual;
 Sql> Spool off;
 Посмотрите как отобразилась в логе кириллица.
 Создать файл с расширением 1.sql (скрипт) в той же папке где и лог.
 В него записать команды, в столбик:
Select ‘Hi’from dual;
Select’Привет’ from dual;
 Открыть протокол на дозапись Spool d:\log.txt append;
 Запустите скрипта на выполнение:
@ d:\1. sql;
 Сохраните изменения в логе
Sql> Spool off;
 Проверьте его содержимое.
В случае неудобного отображения данных при выполнении запросов можно настроить
ширину и заголовок колонки, увеличить выcоту и ширину страницы. Некоторые команды
представлены ниже. Воспользуйтесь ими и посмотрите на результат.
REM Количество строк выходных данных инструкции SELECT перед повторным выводом заголовков
SET PAGESIZE 999
REM Ширина выводимой строки в символах
SET LINESIZE 132
REM Форматирование столбцов, извлекаемых из словаря данных (строкового и числового типа)
COLUMN 1_col FORMAT A30
COLUMN 2_col FORMAT 999.99
REM Changing Default Headings
5
COLUMN LAST_NAME HEADING 'LAST NAME’
REM To reset all column display attributes to their default values, enter:
CLEAR COLUMNS
COLUMN column_name CLEAR
5. Создать учетную запись с именем, содержащем в названии ФИО студента.
Предоставить ей необходимые права и квоты на пространство для дальнейшей работы
(пример см. ниже). Подключиться от имени нового пользователя. В дальнейшем все
задания выполнять на одном и том же АРМ в учебном классе от своей учетной записи в
БД.

CREATE TABLESPACE TBS_01 DATAFILE 'D:\TBS_F5.DAT' SIZE 500K REUSE


AUTOEXTEND ON NEXT 500K MAXSIZE 100M;

CREATE USER USER1 IDENTIFIED BY PASS DEFAULT TABLESPACE TBS_01


QUOTA 10M ON TBS_01 PASSWORD EXPIRE;

GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE


TRIGGER, CREATE SEQUENCE, CREATE VIEW TO USER1;
ИЛИ
GRANT ALL PRIVILEGES;

CONNECT USER_1/PASS;

Запрос структуры представления USER_SYS_PRIVS; SESSION_PRIVS и его


содержимого:
DESC DBA_USERS;

Контрольные вопросы.
1. Назначение и возможности программы SQL*Plus.
2. Ключевые понятия языка SQL и SQL*Plus.
3. Условия, необходимые для работы с программой SQL*Plus, .
4. Запуск и останов программы SQL*Plus.
5. Ввод и выполнение команд.
6. Запуск команд SQL и SQL*Plus.
7. SQL-буфер.
8. Вызов команд SQL*Plus.
9. Остановка команды во время выполнения.
10. Получение справки.
11. Интерпретация сообщений об ошибках.
12. Редактирование команд.
13. Сохранение команд для дальнейшего использования.
14. Установка связи с базой данных.
15. Создание пользователей, выдача прав.

6
Лабораторная работа № 2. Проектирование БД. Операторы DDL. Создание таблиц в
СУБД ORACLE. Ограничения целостности. Изменения в структуре таблицы. Команды
языка определения данных. Команда ALTER. Команды языка манипулирования данными.

Цель лабораторной работы:

1. Научиться анализировать состав таблиц с целью формулирования ограничений


целостности и ссылочных ограничений.
2. Научиться создавать таблицы с заданными ограничениями, изменять их в случае
необходимости.
3. Освоить синтаксис команд DDL, DML.
4. Познакомиться с распространенными типами данных в СУБД.
3. Освоить команды манипулирования данными INSERT и SELECT.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы лекций и методических
пособий.
2. Протокол работы необходимо сохранять в файле.
При именовании таблиц необходимо использовать следующую
маску: "*_v#", где символ * представляет собой имя таблицы, а символ # идентифицирует
номер варианта студента, выполняющего задание.
Задание.
1. Включить запись протокола.
2.Освоить синтаксис команд DDL на примере команд CREATE TABLE и ALTER
TABLE (добавление колонки в уже созданную таблицу, переименование таблицы,
колонки, добавление и отмена ограничения целостности, изменение типа данных,
удаление колонки).
3. Изучить состав таблиц №1, №2, №3, которые необходимо создать (таблицы приведены
в конце текста лабораторной работы).
4. Определить необходимость указания ограничений и порядок создания таблиц.
5. Создать таблицы командами языка определения данных.
6. Ввести в таблицы данные в соответствии с номером своего варианта.
7. Вывести содержимое таблиц на экран.
8. Создать таблицу del1 с полями col1 и со12, в которой сочетание значений полей col1 и
со12 должно уникальным образом идентифицировать каждую запись, а значение поля соl2
по умолчанию должно равняться значению 'Unknown'.
9. Внести в таблицу del1 указанные записи:

10. Просмотреть SQL-описание таблицы dell.


11. Удалить таблицу dell.
12. Представить протокол работы преподавателю.

Пример протокола выполнения работы:


SQL> spool c:\labl_v0p.txt;
SQL> create table dolgn_v0 (code_dolgn integer primary key,name_dolgn char(40) not null);
Table created.
SQL> insert into dolgn_v0 values(2,'ВЕДУЩИЙ ИНЖЕНЕР');
1 row created.
SQL> insert into dolgn_v0 values(9,'КАНЦЕЛЯРИСТ');
1 row created.
7
SQL> insert into dolgn_v0 values (12, ' НАЧАЛЬНИК ОТДЕЛА КАДРОВ');
1 row created.
SQL> insert into dolgn_v0 values(17,'СЛЕСАРЬ-САНТЕХНИК');
1 row created.
SQL> insert into dolgn_v0 values(18, 'СЛЕСАРЬ-ЭЛЕКТРИК');
1 row created.
SQL> insert into dolgn_v0 values(21,'ТЕХНИК 1 КАТЕГОРИИ');
1 row created.
SQL> insert into dolgn_v0 values(22,'ЭЛЕКТРИК');
1 row created.
SQL> create table otdel_v0 (code_otdel integer primary key,name_otdel char(60) not null);
Table created.
SQL> insert into otdel_v0 values(66,'ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ
ПЕРЕРАБОТКИ
2 НЕФТИ И ГАЗА');
1 row created.
SQL> insert into otdel_v0 values(52,'КАДРОВ');
1 row created.
SQL> insert into otdel_v0 values(92,'ХОЗЧАСТЬ');
1 row created.
SQL> create table sotr_v0(code_sotr number(6,0) primary key, FAM char(20) not null, IMYA
char (12) not null,
3 OTCH char (20), date_rozh date not null, date_emp date not null, code_otdel integer references
otdel_v0, code_dolgn integer references dolgn_v0, priznak_uv char(1) default 'н', CHECK
(priznak_uv in ('н','д')));
Table created.
SQL> insert into sotr_v0 values (9580 ,'ЦАПКО' , 'ЛЮДМИЛА' ,'АНДРЕЕВНА' ,
to_date('18.01.50','DD.MM.YY'), to_date('03.09.96', 'DD.MM.YY'), 66 ,2 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200055 ,'КОЛУПАЕВА' , 'ВЕРА', 'АНАТОЛЬЕВНА'
('29.04.28','DD.MM.YY'), ('03.09.96','DD.MM.YY'), 66 ,2 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200198 ,'ШУЛЬЖЕНКО' ,'НИНЕЛЬ' , 'ИВАНОВНА' ,
to_date('28.07.49','DD.MM.YY'), to_date('01.05.95','DD.MM.YY'), 52 ,9 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200202 ,'ГРЕБЕШКОВА' ,'СВЕТЛАНА' ,
'АЛЕКСАНДРОВНА' ,to_date('20.02.49','DD.MM.YY'),to_date('01.05.95','DD.MM.YY'),
52 ,12 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200276 ,'ДЕРГАЧЕВ' ,'ВЛАДИМИР' ,
'АЛЬБЕРТОВИЧ' ,to_date('11.03.60','DD.MM.YY'),to_date('01.08.96','DD.MM.YY'), 92 ,22 ,
'н' );
1 row created.
SQL> insert into sotr_v0 values (200290 ,'ИВАНОВА' , 'ЛЮБОВЬ', 'АНДРЕЕВНА' ,
to_date('20.11.49','DD.MM.YY'),to_date('01.08.96','DD.MM.YY'), 92 ,22 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200297 ,'ГУЛИМОВА' ,'ТАМАРА' ,
'МИХАЙЛОВНА' ,to_date('29.10.49','DD.MM.YY'),to_date('18.11.95','DD.MM.YY'), 92 ,2 ,
'н' );
1 row created.

8
SQL> insert into sotr_v0 values (200314 ,'АЛИМБЕКОВ' ,'РУСЛАН' ,
'ШАМИЛЬЕВИЧ' ,to_date('21.06.70','DD.MM.YY'),to_date('01.02.96','DD.MM.YY'), 92 ,18 ,
'н' );
1 row created.
SQL> insert into sotr_v0 values (200331 , 'ПОПАДИН' ,'НИКОЛАЙ' ,
'ВЛАДИМИРОВИЧ' ,to_date('15.03.56','DD.MM.YY'),
to_date('04.08.96','DD.MM.YY'), 66 ,21 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200397 ,'СТЕПИН' , 'АНДРЕЙ' , 'ВЛАДИМИРОВИЧ' ,
to_date('30.09.73','DD.MM.YY'),to_date('01.05.95','DD.MM.YY'), 52 ,9 , 'н' );
1 row created.
SQL> insert into sotr_v0 values (200432 ,'ФЕДОРОВ' ,'ВЛАДИМИР' ,
'ПЕТРОВИЧ' ,to_date('20.06.36','DD.MM.YY'), to_date('15.11.96','DD.MM.YY'), 92 ,17 , 'н' );
1 row created.
SQL> select * from otdel_v0;
CODE_OTDEL NAME_OTDEL
---------- -----------------------------------------------

66 ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ НЕФТИ И ГАЗА


52 КАДРОВ
92 ХОЗЧАСТЬ
SQL> select * from dolgn_v0;
CODE_DOLGN NAME_DOLGN
---------- ----------------------------------------
2 ВЕДУЩИЙ ИНЖЕНЕР
9 КАНЦЕЛЯРИСТ
12 НАЧАЛЬНИК ОТДЕЛА КАДРОВ
17 СЛЕСАРЬ-САНТЕХНИК
18 СЛЕСАРЬ-ЭЛЕКТРИК
21 ТЕХНИК 1 КАТЕГОРИИ
22 ЭЛЕКТРИК
7 rows selected.
SQL> select code_sotr cs, fam, imya, otch, date_rozh dr,date_emp de, code_otdel со,
code_dolgn cd, priznak_uv p from sotr_v0;
CS FAM IMYA OTCH DR
------- ------------- -------- ------------- ---------
DE СО CD P
--------- --- --- -
200055 КОЛУПАЕВА ВЕРА АНАТОЛЬЕВНА 29-APR-28
03-SEP-96 66 2 н
200198 ШУЛЬЖЕНКО НИНЕЛЬ ИВАНОВНА 28-JUL-49
01-MAY-95 52 9 н
9580 ЦАПКО ЛЮДМИЛА АНДРЕЕВНА 18-JAN-50
03-SEP-96 66 2 н
200202 ГРЕБЕШКОВА СВЕТЛАНА АЛЕКСАНДРОВНА 20-FEB-49
01-MAY-95 52 12 н
200276 ДЕРГАЧЕВ ВЛАДИМИР АЛЬБЕРТОВИЧ 11-MAR-60
01-AUG-96 92 22 н
200290 ИВАНОВА ЛЮБОВЬ АНДРЕЕВНА 20-NOV-49
01-AUG-96 92 22 н
200297 ГУЛИМОВА ТАМАРА МИХАЙЛОВНА 29-OCT-49
18-NOV-95 92 2 н
9
200331 ПОПАДИН НИКОЛАЙ ВЛАДИМИРОВИЧ 15-MAR-56
04-AUG-96 66 21 н
200397 СТЕПИН АНДРЕЙ ВЛАДИМИРОВИЧ 30-SEP-73
01-MAY-95 52 9 н
200432 ФЕДОРОВ ВЛАДИМИР ПЕТРОВИЧ 20-JUN-36
15-NOV-96 92 17 н
200314 АЛИМБЕКОВ РУСЛАН ШАМИЛЬЕВИЧ 21-JUN-70
01-FEB-96 92 18 н
11 rows selected.
SQL> create table dell (col1 number, col2 char(10) default 'Unknown', UNIQUE(coll, col2));
Table created.
SQL> insert into dell values(1,'Unknownl');

1 row created.
SQL> insert into dell values(2,'Unknownl');
1 row created.
SQL> insert into dell values(1,'Unknown2');
1 row created.
SQL> select * from dell;
COL1 COL2
---------- ----------
1 Unknownl
2 Unknownl
1 Unknown2
SQL> describe dell;
Name Null? Type
--------------------- -------- ------------
COL1 NUMBER
COL2 CHAR(10)
SQL> drop table dell;
Table dropped.
SQL> spool off;

Контрольные вопросы.
1. Редактирование команд.
2. Сохранение команд для дальнейшего использования.
3. Установка связи с базой данных. Команда connect. Команда сommit.
4. Ограничения целостности.
5. Изменения в структуре таблицы. Команды языка определения данных. Команда Alter.

10
11
Лабораторная работа № 3. Реляционная алгебра. Реляционные операторы и SQL-
операторы. Реализация реляционной алгебры средствами SQL. Формирование запросов
для выборки данных.
Цель лабораторной работы:
1. Освоить приемы использования реляционных операторов на примере построенных в
предыдущих лабораторных работах отношений.
2. Освоить использование стандартных функций SQL.
3. Освоить использование SQL-операторов SELECT.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы лекций.
2. При выполнении работы необходимо использовать таблицы, созданные в лабораторной
работе № 1.
3. Необходимо сохранить протокол работы в файле, а затем сдать его на проверку
преподавателю.
При именовании представления необходимо использовать следующую маску: "*_v#", где
символ * представляет собой имя представления, а символ # идентифицирует номер
варианта студента, выполняющего задание.
Задание.
1. Включить запись протокола.
2. Представить результат работы всех реляционных операторов на примере таблиц БД с
использованием языка SQL.
3. Получить список всех отделов предприятия.
4. Извлечь из базы данных все данные по сотрудникам, принятым на работу после
01.01.1980г. в формате "Сотрудник <фамилия_сотрудника и его инициалы> принят на
работу <дата_принятия_на_работу> ".
5. Извлечь из базы данных перечень должностей, которые имеют сотрудники отделов
указанных в таблице №4 (В SQL-запросе использовать названия отделов).
6. Извлечь из базы данных значение максимального личного шифра и фамилию
сотрудника с этим номером в формате "Максимальный личный шифр <значение шифра>
имеет сотрудник <фамилия_сотрудника и его инициалы > ".

12
7. Получить из базы данных значение числа записей в таблице данных о сотрудниках в
формате " Таблица данных о сотрудниках содержит <число_записей> записей ".
8. Получить единым запросом список отделов и должностей предприятия.
9. Получить значение квадратного корня из заданного числа с округлением результата до
заданной точности (см.таблицу №5).

10. Получить значение системного времени в полном формате.


11. Создать представление, содержащее шифр, фамилию, имя и отчество сотрудника,
занимаемую им должность и название отдела, в котором этот сотрудник работает. При
создании представления использовать алиасы.
12. Вывести данные представления с сортировкой по названию отделов в обратном
порядке, а для каждого отдела – фамилиям сотрудников в возрастающем порядке.
13. Извлечь из созданного представления фамилии сотрудников, которых присутствует
буква 'К', не присутствует буква 'А', оканчивается на букву 'А', вторая буква в ФИО -
буква 'А'.
14. Извлечь из созданного представления перечень должности, которые имеют
сотрудники отделов, указанных в таблице
15. Извлечь из созданного представления максимальный личный шифр сотрудника по
каждому отделу, где максимальный шифр сотрудников больше среднего.
16. Получить список отделов, в соответствии с условием, указанным для выполняемого
варианта (см. таблицу 6).

13
Пример протокола выполнения работы:
SQL> spool c:\lab2_v0p.txt;
SQL> select * from otdel_v0;
CODE_OTDEL NAME_OTDEL
---------- ----------------------------------------------
66 ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ НЕФТИ И ГАЗА
52 КАДРОВ
92 ХОЗЧАСТЬ
SQL> select 'Сотрудник ' ||fam||' принят на работу
'||TO_CHAR(date_emp) from sotr_v0 where date_emp >
to_date('01-02-80', 'DD-MM-YY');
'СОТРУДНИК'||FAM||'ПРИНЯТНАРАБОТУ'||TO_CHAR(DATE_EMP)
---------------------------------------------------------
Сотрудник КОЛУПАЕВА принят на работу 03-SEP-96
Сотрудник ШУЛЬЖЕНКО принят на работу 01-MAY-95
Сотрудник ЦАПКО принят на работу 03-SEP-96
Сотрудник ГРЕБЕШКОВА принят на работу 01-MAY-95
Сотрудник ДЕРГАЧЕВ принят на работу 01-AUG-96
Сотрудник ИВАНОВА принят на работу 01-AUG-96
Сотрудник ГУЛИМОВА принят на работу 18-NOV-95
Сотрудник ПОПАДИН принят на работу 04-AUG-96
Сотрудник СТЕПИН принят на работу 01-MAY-95
Сотрудник ФЕДОРОВ принят на работу 15-NOV-96
Сотрудник АЛИМБЕКОВ принят на работу 01-FEB-96
11 rows selected.
SQL> select name_dolgn from dolgn_v0 where code_dolgn in(select code_dolgn from sotr_v0
where code_otdel in (select code_otdel from otdel_v0 where name_otdel in
('КАДРЫ','ХОЗЧАСТЬ')));

NAME_DOLGN
----------------------------------------
ВЕДУЩИЙ ИНЖЕНЕР
СЛЕСАРЬ-САНТЕХНИК
СЛЕСАРЬ-ЭЛЕКТРИК
ЭЛЕКТРИК
SQL> select 'Максимальный личный шифр - ', code_sotr, ' -имеет сотрудник ', trim (fam) ||
'.'||substr(imya,1,1) || '.' || substr(otch,1,1) || '.' from sotr_v0 where code_sotr=(select
max(code_sotr) from sotr_v0);
'МАКСИМАЛЬНЫЙЛИЧНЫЙШИФР-' CODE_SOTR '-ИМЕЕТСОТРУДНИК'
--------------------------- ---------- -------------------
TRIM(FAM)||'.'||SUBSTR(IM
-------------------------
14
Максимальный личный шифр - 200432 - имеет сотрудник
ФЕДОРОВ.В.П.
SQL> select 'Таблица данных о сотрудниках содержит ',
count(*),' записей '
2 from sotr_v0;
'ТАБЛИЦАДАННЫХОСОТРУДНИКАХСОДЕРЖИТ' COUNT(*) 'ЗАПИСЕЙ'
-------------------------------------- ---------- ---------
Таблица данных о сотрудниках содержит 11 записей
SQL> select code_otdel, name_otdel from otdel_v0 union
2 select code_dolgn, name_dolgn from dolgn_v0;
CODE_OTDEL NAME_OTDEL
---------- ----------------------------------------------
2 ВЕДУЩИЙ ИНЖЕНЕР
9 КАНЦЕЛЯРИСТ
12 НАЧАЛЬНИК ОТДЕЛА КАДРОВ
17 СЛЕСАРЬ-САНТЕХНИК
18 СЛЕСАРЬ-ЭЛЕКТРИК
21 ТЕХНИК 1 КАТЕГОРИИ
22 ЭЛЕКТРИК
52 КАДРОВ
66 ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ НЕФТИ И ГАЗА
92 ХОЗЧАСТЬ
10 rows selected.
SQL> select round(sqrt(17),1) from dual;
ROUND(SQRT(17),1)
-----------------
4.1
SQL> select to_char(sysdate,'dd:mm:yyyy') from dual;
TO_CHAR(SY
----------
10:02:2007
SQL> create view browseall_v0 as
2 select a.fam, a.imya, a.otch, a.code_sotr, b.name_otdel,
c.name_dolgn
3 from sotr_v0 a, otdel_v0 b, dolgn_v0 c
4 where a.code_otdel=b.code_otdel and
a.code_dolgn=c.code_dolgn;
View created.
SQL> select name_otdel, code_sotr, fam from browseall_v0
order by name_otdel desc, code_sotr asc;
NAME_OTDEL CODE_SOTR FAM
--------------------------------- ---------- -----------
ХОЗЧАСТЬ 200276 ДЕРГАЧЕВ
ХОЗЧАСТЬ 200290 ИВАНОВА

ХОЗЧАСТЬ 200297 ГУЛИМОВА


ХОЗЧАСТЬ 200314 АЛИМБЕКОВ
ХОЗЧАСТЬ 200432 ФЕДОРОВ
ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ 9580 ЦАПКО
НЕФТИ И ГАЗА
ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ 200055 КОЛУПАЕВА
НЕФТИ И ГАЗА
15
ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ 200331 ПОПАДИН
НЕФТИ И ГАЗА
КАДРОВ 200198 ШУЛЬЖЕНКО
КАДРОВ 200202 ГРЕБЕШКОВА
КАДРОВ 200397 СТЕПИН
11 rows selected.
SQL> select fam from browseall_v0 where fam like '%К%';
FAM
--------------------
КОЛУПАЕВА
ШУЛЬЖЕНКО
ЦАПКО
ГРЕБЕШКОВА
АЛИМБЕКОВ
SQL> select name_dolgn from browseall_v0 where name_otdel in ('КАДРЫ', 'ХОЗЧАСТЬ');

NAME_DOLGN
----------------------------------------
ЭЛЕКТРИК
ЭЛЕКТРИК
ВЕДУЩИЙ ИНЖЕНЕР
СЛЕСАРЬ-САНТЕХНИК
СЛЕСАРЬ-ЭЛЕКТРИК
SQL> select distinct name_dolgn from browseall_v0 where name_otdel in ('КАДРЫ',
'ХОЗЧАСТЬ');
NAME_DOLGN
----------------------------------------
ВЕДУЩИЙ ИНЖЕНЕР
СЛЕСАРЬ-САНТЕХНИК
СЛЕСАРЬ-ЭЛЕКТРИК
ЭЛЕКТРИК
SQL> select name_otdel,max(code_sotr) from browseall_v0 group by name_otdel having
name_otdel in(select name_otdel from browseall_v0 where code_sotr>(select avg(code_sotr)
from browseall_v0));
NAME_OTDEL MAX(CODE_SOTR)
--------------------------------------- --------------
КАДРОВ 200397
ХИМИЧЕСКАЯ ТЕХНОЛОГИЯ ПЕРЕРАБОТКИ 200331
НЕФТИ И ГАЗА
ХОЗЧАСТЬ 200432
SQL> spool off;
17
Контрольные вопросы.
1. Использование алиасов.
2. Использование раздела объединения.
3. Использование раздела WHERE
4. Использование разделов GROUP BY и HAVING.
5. Использование раздела ORDER BY.
6. Использование сложного подзапроса.
7. Генерация строк с использованием данных, извлекаемых из базы данных.
8. Создание представлений. Цель их применения.
9. Реляционные операторы и SQL-команды.
16
Лабораторная работа № 4. Команды INSERT, UPDATE, DELETE. Формирование
запросов для выборки данных с применением встроенных функций и предикатов.

Цель лабораторной работы:


1. Освоить приемы использования команд INSERT, UPDATE,DELETE, способы
формирования запросов для выборки данных с применением встроенных функций
и предикатов .
2. Знать основные встроенные функции, правила построения коррелированных и
некоррелированных запросов.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы лекций.
2. При работе использовать таблицы, созданные при выполнении лабораторной работы
№1.
3. При именовании таблиц необходимо использовать следующую маску : "*_v#", где
символ * представляет собой имя таблицы, а символ # идентифицирует номер варианта
студента, выполняющего задание.
4. Необходимо сохранить протокол работы в файле, а затем сдать его на проверку
преподавателю.
Задание.
1. Включить запись протокола.
2. На базе справочника сотрудников с помощью команды CREATE TABLE с подзапросом
создать таблицу sotr2 (включить поля с шифром, фамилией, именем, кодом должности
каждого сотрудника).
3. С помощью команды ALTER TABLE добавить в созданную таблицу первичный ключ.
4. В таблице sotr2 увеличить значение каждого личного шифра на 10000.
5. В таблице k_sotr2 удвоить значение каждого личного шифра.
6. В зависимости от номера варианта добавить в таблицу k_sotr2 все записи о
сотрудниках, указанных в таблице 7.

7. Обнулить значения шифра должности каждого сотрудника в таблице sotr2.


8. Восстановите значения шифра должности каждого сотрудника в таблице sotr2 по
имени и фамилии сотрудников в таблице кодификатора сотруднике.
9. И в соответствии с номером варианта создать последовательность seq1, отвечающую
требованиям, указанным в таблице 8.
10. Создать таблицу payment2 со следующими полями: шифр выплаты, шифр сотрудника
(внешний ключ - в таблице sotr2), дата выплаты, сумма выплаты.
11. С использованием последовательности seq1 внести в таблицу payment произвольные
три записи.
12. Удалить из таблицы sotr2 записи о сотрудниках, о которых нет записей в таблице
payment2.
17
13. Удалить таблицы sotr2 с каскадным удалением связей с дочерними таблицами.

Пример протокола выполнения работы:


SQL> spool c:\lab3_0p.txt;
SQL> create table sotr2_v0 as select
code_sotr,fam,imya,code_dolgn
2 from sotr_v0;
Table created.
SQL> alter table sotr2_v0 add constraint my1 primary key(code_sotr);
Table altered.
SQL> update sotr2_v0 set code_sotr=code_sotr+10000;
11 rows updated.
SQL> update sotr2_v0 set code_sotr=code_sotr*2 ;
11 rows updated.
SQL> update sotr2_v0 set code_sotr=code_sotr*2 ;
11 rows updated.
SQL> insert into sotr2_v0(code_sotr,fam, imya, code_dolgn) select
code_sotr,fam,imya,code_dolgn
3 from sotr_v0 where code__otdel in (select code_otdel from otdel_v0 where name_otdel in
('ХОЗЧАСТЬ','КАДРОВ'));
8 rows created.
SQL> update sotr2_v0 set code_dolgn=null;
19 rows updated.
SQL> update sotr2_v0 set code_dolgn=null;
19 rows updated.
SQL> update sotr2_v0 k2 set k2.code_dolgn=(select k.code_dolgn from sotr_v0 k where
k2.fam=k.fam);
19 rows updated.
SQL> create table payment1_v0 (code_sotr integer references sotr2_v0,paydate date,paysum
number);
Table created.
SQL> select * from sotr2_v0;
CODE_SOTR FAM IMYA CODE_DOLGN
---------- -------------------- ------------ ----------
840220 КОЛУПАЕВА ВЕРА 2
840792 ШУЛЬЖЕНКО НИНЕЛЬ 9
78320 ЦАПКО ЛЮДМИЛА 2
840808 ГРЕБЕШКОВА СВЕТЛАНА 12
841104 ДЕРГАЧЕВ ВЛАДИМИР 22
18
841160 ИВАНОВА ЛЮБОВЬ 22
841188 ГУЛИМОВА ТАМАРА 2
841324 ПОПАДИН НИКОЛАЙ 21
841588 СТЕПИН АНДРЕЙ 9
841728 ФЕДОРОВ ВЛАДИМИР 17
841256 АЛИМБЕКОВ РУСЛАН 18
200198 ШУЛЬЖЕНКО НИНЕЛЬ 9
200202 ГРЕБЕШКОВА СВЕТЛАНА 12
200276 ДЕРГАЧЕВ ВЛАДИМИР 22
200290 ИВАНОВА ЛЮБОВЬ 22
200297 ГУЛИМОВА ТАМАРА 2
200397 СТЕПИН АНДРЕЙ 9
200432 ФЕДОРОВ ВЛАДИМИР 17
200314 АЛИМБЕКОВ РУСЛАН 18
19 rows selected.
SQL> insert into payment1_v0 values (840808,sysdate,10000);
1 row created.
SQL> insert into payment1_v0 values (840808,sysdate,20000);
1 row created.
SQL> insert into payment1_v0 values (840808,sysdate,30000);
1 row created.
21
SQL> create sequence my1 increment by 1 start with 1;
Sequence created.
SQL> create table payment2_v0 (code_payment integer primary
key, code_sotr integer references sotr2_v0, paydate
date,paysum number);
Table created.
SQL> insert into payment2_v0 values
(my1.nextval,840808,sysdate,10000);
1 row created.
SQL> select * from payment2_v0;
CODE_PAYMENT CODESOTR PAYDATE PAYSUM
------------ ---------- --------- ----------
1 840808 10-FEB-07 10000
SQL> insert into payment2_v0 values (my1.nextval,
840808,sysdate,20000);
1 row created.
SQL> insert into payment2_v0 values (my1.nextval,
840808,sysdate,30000);
1 row created.
SQL> select * from payment3_v0;
CODE_PAYMENT CODESOTR PAYDATE PAYSUM
------------ ---------- --------- ----------
1 840808 10-FEB-07 10000
2 840808 10-FEB-07 20000
3 840808 10-FEB-07 30000
SQL> delete from sotr2_v0 where code_sotr not in (select
code_sotr from payment2_v0);
18 rows deleted.
SQL> drop table sotr2_v0;
drop table sotr2_v0
19
*
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign
keys
SQL> drop table sotr2_v0 cascade constraints;
Table dropped.
SQL> select * from payment3_v0;
CODE_PAYMENT CODESOTR PAYDATE PAYSUM
------------ ---------- --------- ----------
1 840808 10-FEB-07 10000
2 840808 10-FEB-07 20000
3 840808 10-FEB-07 30000
SQL> spool off;
Контрольные вопросы.
1. Способы копирования таблиц в Oracle.
2. Оператор UPDATE.
3. Оператор INSERT.
4. Оператор DELETE.
5. Использование подзапросов.
6. Создание первичных ключей для существующих таблиц базы данных.
7. Создание последовательностей и работа с ними.

Лабораторная работа № 5. Изучение PL/SQL. Типы данных. Хранимые процедуры,


функции, блоки PL/SQL, пакеты, триггеры.

Цель лабораторной работы:


Освоить приемы создания пользовательских типов данных, использования хранимых
процедур, функций, пакетов и блоков PL/SQL, а также триггеров базы данных Oracle, как
способов реализации логики приложения на уровне сервера базы данных.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы лекций.
2. Необходимо сохранить протокол работы в файле, а затем сдать его на проверку
преподавателю.
3. При именовании объектов необходимо использовать следующую маску : "*_v#", где
символ * представляет собой имя объекта, а символ # идентифицирует номер варианта
студента, выполняющего задание.

Задание.
Общее задание.
1. Включить запись протокола.
2. Создать таблицу k_sotr.

20
3. Создать функцию, возвращающую по фамилии сотрудника номер его телефона.
4. Создать процедуру, которая по фамилии сотрудника и номеру телефона переводит
указанного сотрудника в аудиторию с данным номером телефона.
5. Создать триггер, который при внесении изменений в таблицу raspol регистрирует это
внесением соответствующей записи в таблицу registration.
6. Создать пакет PACKAGE 1, содержащий функцию и процедуру, аналогичные
созданным в пп.3-4. Пакет должен содержать описание exception-ситуации отсутствия
данных в таблицах, выдающей пользователю соответствующее сообщение.
7. Создать примеры пользовательских данных и реализовать пример работы с такими
данными в таблицах базы данных и обращение к ним через PL/SQL.

21
22
23
24
25
26
27
28
Пример протокола выполнения работы:
SQL> spool c:\lab41_v0.txt;
SQL> create table sotr_b_v0 (code_sotr number primary key, name_sotr char(20));
Table created.
SQL> insert into sotr_b_v0 values(1, 'Иванов');
1 row created.
SQL> insert into sotr_b_v0 values(2, 'Петров');
1 row created.
SQL> insert into sotr_b_v0 values(3, 'Сидорова');
1 row created.
SQL> insert into sotr_b_v0 values(4, 'Алексеев');
1 row created.
SQL> insert into sotr_b_v0 values(5, 'Михайлов');
1 row created.
33
SQL> create table registration_v0 ( code_change number primary key, change_time date,
changer char(20));
Table created.
SQL> -- Выполнение задания по варианту.
SQL> create table audit_fone_v0 (code_audit number primary key, code_fone char (4));
Table created.
SQL> insert into audit_fone_v0 values(1221, '1-54');
1 row created.
SQL> insert into audit_fone_v0 values(3314, '2-41');
29
1 row created.
SQL> insert into audit_fone_v0 values(512, '1-15');
1 row created.
SQL> insert into audit_fone_v0 values(2221, '3-22');
1 row created.
SQL> create table raspol_v0(code_sotr number references sotr_b_v0 unique, code_audit number
references audit_fone_v0);
Table created.
SQL> insert into raspol_v0 values(1,1221);
1 row created.
SQL> insert into raspol_v0 values(2,1221);
1 row created.
SQL> insert into raspol_v0 values(3,3314);
1 row created.
SQL> insert into raspol_v0 values(4,512);
1 row created.
SQL> insert into raspol_v0 values(5,2221);
1 row created.
SQL> create function getfonenumber(fam varchar2)
return varchar2
is
fonenumber char(4);
fam1 char(15);
begin
fam1:=fam;
select code_fone into fonenumber from audit_fone_v0
where code_audit=(select code_audit from raspol_v0 where
code_sotr=(select code_sotr from sotr_b_v0 where
name_sotr=fam1));
return(fonenumber);
end;
/
Function created.
SQL> select getfonenumber('Иванов') from dual;
GETFONENUMBER('ИВАНОВ')
----------------------------------------------
1-54
SQL> create procedure sendsotrto(fam varchar2, newfone varchar2)

as
new_audit_code number;
code_sotr_sended number;
fam1 char(15);
newfone1 char(4);
begin
newfone1:=substr(newfone,1,4);
select code_audit into new_audit_code from audit_fone_v0 where code_fone=newfone1;
fam1:=substr(fam,1,15);
select code_sotr into code_sotr_sended from sotr_b_v0 where name_sotr=fam1;
update raspol_v0 set code_audit=new_audit_code
where code_sotr=code_sotr_sended;
end;
30
/
Procedure created.
SQL> begin
sendsotrto('Иванов','3-22');
sendsotrto('Иванов','1-54');
end ;
/
PL/SQL procedure successfully completed.
SQL> create or replace view fones_v0 as select a.name_sotr, b.code_audit, c.code_fone from
sotr_b_v0 a, raspol_v0 b, audit_fone_v0 c where a.code_sotr=b.code_sotr and
b.code_audit=c.code_audit;
View created.
SQL> select * from fones_v0;
NAME_SOTR CODE_AUDIT CODE
-------------------- ---------- ----
Иванов 1221 1-54
Петров 1221 1-54
Алексеев 512 1-15
Михайлов 2221 3-22
Сидорова 3314 2-41
SQL> begin
sendsotrto('Иванов','3-22');
end;
/
PL/SQL procedure successfully completed.
SQL> select * from fones_v0;
NAME_SOTR CODE_AUDIT CODE
-------------------- ---------- ----
Иванов 2221 3-22
Петров 1221 1-54
Алексеев 512 1-15
Михайлов 2221 3-22
Сидорова 3314 2-41
--создание вспомогательной последовательности для работы
--таблицей registration
SQL> create sequence registration_seq_v0 increment by 1 start with 1;
Sequence created.
SQL> create or replace trigger registration_v0_trigger after delete or insert or update on
raspol_v0
begin
insert into registration_v0
values(registration_seq_v0.nextval,sysdate,user);
end ;
/
Trigger created.
SQL> begin
sendsotrto('Иванов','2-41');
end;
/
PL/SQL procedure successfully completed.
SQL> -- Удостоверимся, что перевод состоялся
SQL> select * from fones_v0;
31
NAME_SOTR CODE_AUDIT CODE
-------------------- ---------- ----
Иванов 3314 2-41
Петров 1221 1-54
Алексеев 512 1-15
Михайлов 2221 3-22
Сидорова 3314 2-41
SQL> begin
sendsotrto('Иванов','1-54');
end;
/
PL/SQL procedure successfully completed.
SQL> -- Удостоверимся, что триггер срабатывает.
SQL> select * from registration_v0;
CODE_CHANGE CHANGE_TI CHANGER
----------- --------- --------------------
1 11-FEB-07 JAKE
2 11-FEB-07 JAKE
SQL> --Создание пакета
SQL> create or replace package package1 as
procedure sendsotrto(fam varchar2,newfone varchar2);
procedure returnerror;
function getfonenumber(fam varchar2) return varchar2;
PRAGMA RESTRICT_REFERENCES (getfonenumber, WNDS);
end package1;
/
Package created.
SQL> create or replace package body package1
as
function getfonenumber(fam varchar2) return varchar2
is
fonenumber char(4);
fam1 char(15);
begin
fam1:=fam;
select code_fone into fonenumber from audit_fone_v0 where code_audit=(select code_audit
from raspol_v0 where code_sotr=(select code_sotr from sotr_b_v0 where name_sotr=fam1));
return(fonenumber);
end getfonenumber;
procedure returnerror
is
begin
raise_application_error(-20000, 'Нет данных');
end returnerror;
procedure sendsotrto(fam varchar2, newfone varchar2) is
new_audit_code number;
code_sotr_sended number;
fam1 char(15);
newfone1 char(4);
begin
newfone1:=substr(newfone,1,4);
select code_audit into new_audit_code from audit_fone_v0 where code_fone=newfone1;
32
31 fam1:=substr(fam,1,15);
select code_sotr into code_sotr_sended from sotr_b_v0 where name_sotr=fam1;
update raspol_v0 set code_audit=new_audit_code where code_sotr=code_sotr_sended;
EXCEPTION WHEN no_data_found THEN returnerror;
end sendsotrto;
end package1;
/
Package body created.
SQL> declare
ivanovs_fone char(4);
begin
select package1.getfonenumber('Иванов') into ivanovs_fone from dual ;
package1.sendsotrto('Иванов','1-54');
end;
/
PL/SQL procedure successfully completed.
SQL> spool off;

Контрольные вопросы.
1. Изучение PL/SQL. Типы данных. Пользовательские типы данных.
2.Использование анонимных блоков PL/SQL.
3. Использование процедур.
4. Использование функций.
5. Использование пакетов PL/SQL.
6. Использование триггеров.

Лабораторная работа № 6. Изучение PL/SQL. Типы данных. Элементы


программирования на языке PL/SQL.
Цель лабораторной работы:
Освоить приемы создания и использования блоков PL/SQL с
использованием типичных конструкций и объектов языка PL/SQL.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы следующих лекций.
2. Необходимо сохранить протокол работы в файле, а затем сдать его на проверку
преподавателю.
3. При именовании объектов необходимо использовать следующую маску : "*_v#", где
символ * представляет собой имя объекта, а символ # идентифицирует номер варианта
студента, выполняющего задание.
Задание.
Вариант 0.
Создать блок PL/SQL, в котором:
• Осуществляется вызов процедуры пакета PACKAGE 1 со значениями фамилии
сотрудника и номера телефона, запрашиваемыми у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр сотрудника> таблицы raspol в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 3
в переменной nl, а остальных значений — в переменной п2;
• • Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 1.
Создать блок PL/SQL, в котором:

33
• Осуществляется вызов процедуры пакета PACKAGE 1 со значениями фамилий
сотрудников, запрашиваемыми у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр инвентарной единицы> таблицы inventar в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших
26 в переменной nl, a остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 2.
Создать блок PL/SQL, в котором:
• Осуществляется вызов процедуры пакета PACKAGE 1 со значениями фамилии и
названия объекта,
запрашиваемыми у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр объекта> таблицы stroitelstvo в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 5
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 3.
Создать блок PL/SQL, в котором:
• Осуществляется вызов процедуры пакета PACKAGE 1 со значениями фамилии
сотрудника и названия проекта, запрашиваемыми у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр проекта> таблицы project в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 5
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 4.
Создать блок PL/SQL, в котором:
• Осуществляется вызов функции пакета PACKAGE 1 со значением фамилии сотрудника,
запрашиваемым у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Разряд> таблицы sotr salary в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 6
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 5.
Создать блок PL/SQL, в котором:
• Осуществляется вызов функции пакета PACKAGE! Со значением фамилии сотрудника,
запрашиваемым у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр сотрудника> таблицы sotr_mat_pom в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 3
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 6.
Создать блок PL/SQL, в котором:

34
• Осуществляется вызов функции пакета PACKAGE 1 со значением фамилии сотрудника,
запрашиваемым у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр города> таблицы komandirovka в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 2
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.

Вариант 7.
Создать блок PL/SQL, в котором:
• Осуществляется вызов процедуры пакета PACKAGE 1 со значением даты,
запрашиваемым у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр сотрудника> таблицы bolesn в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 3
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Вариант 8.
Создать блок PL/SQL, в котором:
• Осуществляется вызов процедуры пакета PACKAGE 1 со значением должности,
запрашиваемым у пользователя;
• С использованием курсора PL/SQL и переменной типа запись осуществляется перенос
данных из поля <Шифр должности> таблицы dolgnost в таблицу PL/SQL;
• Производится перебор значений указанной таблицы с накоплением значений, больших 2
в переменной nl, а остальных значений — в переменной п2;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.

Пример протокола выполнения работы:


SQL> declare
n binary_integer;
n1 integer;
n2 integer;
c1 char(15);
c2 char(15);
type TP1 is table of number index by binary_integer;
varTP1 TP1;
U1 raspol_v0%ROWTYPE;
cursor FIRSTCURSOR is select code_sotr,code_audit from raspol_v0;
past_due EXCEPTION;
begin
c1:='&ss';
c2 := '&dd' ;
package1.sendsotrto(c1, c2) ;
open FIRSTCURSOR;
LOOP
n:=n+1;
FETCH FIRSTCURSOR into U1;
IF n<255 THEN varTP1(n):=U1.code_sotr;
IF varTP1(n)>3 THEN
35
n1:=n1+varTP1(n);
ELSE
n2:=n2+varTP1(n);
END IF;
END IF;
IF FIRSTCURSOR%NOTFOUND THEN EXIT; END IF;
END LOOP;
CLOSE FIRSTCURSOR;
raise past_due;
EXCEPTION
WHEN past_due THEN raise_application_error(-20000,'Ошибка в программе');
end;
/
Enter value for ss: Иванов
old 13: c1:='&ss';
new 13: c1:='Иванов';
Enter value for dd: 1-54
old 14: c2 := '&dd' ;
new 14: c2 := '1-54' ;
declare
*
ERROR at line 1:
ORA-20000: Ошибка в программе
ORA-06512: at line 32

Контрольные вопросы.
1. Использование пакетов PL/SQL.
2. Объявление переменных стандартных типов.
3. Объявление констант.
4. Объявление типов пользователя и переменных этих типов.
5. Таблицы PL/SQL.
6. Использование атрибутов объектов базы данных при объявлении
переменных.
7. Использование курсоров.
8. Ввод значений пользователем.
9. Условные конструкции PL/SQL.
10. Использование исключений.

Лабораторная работа № 7. Параллельная обработка данных. Средства защиты


информации.
Цель лабораторной работы.
Освоить навыки совместного использования таблиц базы данных.
Указания по выполнению работы:
1. При выполнении работы необходимо изучить материалы лекций.
2. Протокол работы необходимо сохранять в файле.
При именовании таблиц необходимо использовать следующую маску : "*_v#", где символ
* представляет собой имя таблицы, а символ # идентифицирует номер варианта студента,
выполняющего задание.
Задание.
1. Включить запись протокола.
2. Проанализировать файл scriptl.sql, предоставленный преподавателем.
3. Просмотреть описание и содержимое таблицы kwriter пользователя jake.
36
4. Просмотреть описание и содержимое таблицы kbook пользователя jake.
5. С помощью файла scriptl.sql создать в своей схеме и заполнить записями таблицу
k_book, использующую в качестве внешнего ключа поле code_writer таблицы k_writer
пользователя jake.
6. Передать пользователю jake привилегии на выборку данных и обновление данных
таблицы k_book.
7. Передать пользователю jake все привилегии по таблице kbook с правом их
последующей передачи.
8. Передать привилегии на выборку данных из таблицы kbook всем пользователям.
9. Отменить передачу привилегий по таблице kbook для всех пользователей.
10. На основе собственной таблицы k_book и таблицы kwriter пользователя jake создать
представление books_available(shifr,nazv.author) и просмотреть его содержимое.
11. После получения от преподавателя привилегий на обновление поля code_writer
таблицы k_book пользователя jake, попытаться с помощью команды UPDATE выполнить
как можно больше изменений значений этого поля.
Пример выполнения лабораторной работы.
describe jake.k_writer;
select * from jake.k_writer;
describe jake.k_book;
select * from jake.k_book;
create table k_book(
code_book integer primary key,
name_book char(20),
code_writer integer references jake.k_writer);
insert into k_book values(1,'Книга1',1);
insert into k_book values (2, 'Книга2',1);
insert into k_book values(3,'Книга3,c);
insert into k_book values (4,'Книга4',2);
insert into k_book values(5,'Книга5',3);
insert into k_book values(6,'Книгаб',3);
insert into k_book values(7,'Книга7',4);
insert into k_book values (8,'Книга8,4);
grant select, update on k_book to jake;
grant all on k_book to jake with admin option;
grant select on k_book to public;
revoke all on k_book from public;
create view books_available(shifr,nazv,author) as select
a.code_book,a.namejtraok,b.name_writer from k_book
a,jake.k_writer b where a.code_writer=b.code_writer;
select * from books_available;
update jake.k_book set code_writer=1 where code_book=1;
update jake.k_book set code_writer=2 where code_book=1;

Контрольные вопросы.
1. Назначение команд управления данными.
2. Команда GRANT.
3. Команда REVOKE.
4. Роли базы данных.
5. Системные привилегии базы данных.
6. Ключевое слово PUBLIC.
7. Ключевое слово ALL.
Содержимое файла scriptl.sql
37
(выполняется преподавателем или администратором базы данных)
--Создание общих объектов в схеме jake.
create table k_writer( code_writer integer primary key,
name_author char (20));
insert into k_writer values(1,'Иванов');
insert into k_writer values(2,'Петров');
insert into k_writer values(3,'Сидоров');
insert into k_writer values(4,'Алексеев');
create table k_book(
code_book integer primary key,
name_book char(20),
code_writer integer references jake.k_writer);
insert into k_book values (1, 'Книга1',1);
insert into k_book values(2, 'Книга2', 1) ;
insert into k_book values(3,'Книга3',2);
insert into k_book values(4,'Книга4',2);
insert into k_book values(5,'Книга5',3);
insert into k_book values(6, 'Книга6', 3);
insert into k_book values(7,'Книга7',4);
insert into k_book values(8,'Книга8',4);
grant select on jake.k_writer to public;
grant select on jake.k_book to public;
grant update(code_writer) on jake.k_book to public;__

38
Учебно-методическое и информационное обеспечение дисциплины
1. Космачева И.М. Методические указания для выполнения лабораторных работ по
дисциплине «Безопасность систем баз данных» для обучающихся по направлению
10.03.01 Информационная безопасность / Сост. АГТУ. 2020. [Электронный ресурс].
Режим доступа: www.portal2.astu.org.
2. Космачева И.М. Методические указания для выполнения практических работ по
дисциплине «Безопасность систем баз данных» для обучающихся по направлению
10.03.01 Информационная безопасность / Сост. АГТУ. 2020. [Электронный ресурс].
Режим доступа: www.portal2.astu.org.
3. Космачева И.М. Методические указания для выполнения самостоятельной работы по
дисциплине «Безопасность систем баз данных» для обучающихся по направлению
10.03.01 Информационная безопасность / Сост. АГТУ. 2020. [Электронный ресурс].
Режим доступа: www.portal2.astu.org.
4. Космачева И.М. Методические указания для выполнения курсовой работы (проекта) по
дисциплине «Безопасность систем баз данных» для обучающихся по специальности
10.05.03 Информационная безопасность автоматизированных систем, Специализация
Анализ безопасности информационных систем, направлению 10.03.01 Информационная
безопасность / Сост. АГТУ. 2020. [Электронный ресурс]. Режим доступа:
www.portal2.astu.org.
5. Язык SQL. Базовый курс: учеб.-практ. пособие / Е. П. Моргунов; под ред. Е. В. Рогова,
П. В. Лузанова; Postgres Professional. — М., 2017. — 257 с. [Электр.] Режим доступа:
https://postgrespro.ru/media/2017/08/09/sqlprimer.pdf
6. Обеспечение безопасности баз данных: метод. пособие для лабораторных и
практических занятий по курсу «Безопасность систем баз данных» и дисциплин,
связанных с изучением СУБД Oracle для студентов специальностей (направлений)
10.05.03, 10.03.01, 09.03.01, 09.03.04, 09.04.01 / АГТУ; Сост.: И.М. Космачева - Астрахань,
2018. -44 с. [Электронный ресурс]. Режим доступа: portal2.astu.org.
7. Куркурин Н.Д. Язык структурированных запросов SQL и MICROSOFT ACCESS.:
Лабораторный практикум по дисциплине "Базы данных". Для студентов дневной и
заочной форм обучения направлений 09.03.01 "Информатика и вычислительная техника",
09.03.03 "Прикладная информатика", 09.03.04 "Программная инженерия", 38.03.05
"Бизнес- информатика". — Астрахань: АГТУ, 2015. — 56 с. — 56 экз.
8. Распределенные базы данных : учебное пособие / Министерство образования и науки
Российской Федерации, Федеральное государственное автономное образовательное
учреждение высшего профессионального образования «Северо- Кавказский федеральный
университет» ; авт.-сост. Н.Ю. Братченко. - Ставрополь : СКФУ, 2015. - 130 с. : ил. -
Библиогр.: с. 125. ; То же [Электронный ресурс]. - URL: http://biblioclub.ru/index.php?
page=book&id=457594
9. Космачева И.М., Сибикина И.В. Безопасность систем баз данных. Курс лекций для
студентов специальности 10.05.03 "Информационная безопасность автоматизированных
систем" и направления 10.03.01 "Информационная безопасность".
Астрахань: АГТУ, 2015
10. Космачева И.М., Белов С.В., Сибикина И.В. Проектирование защищенных баз
данных.: Методическое пособие по выполнению лабораторных работ по дисциплине для
студентов специальностей и направлений 090303.65 "Информационная безопасность
автоматизированных систем", 090900.62 "Информационная безопасность". Астрахань:
АГТУ, 2013

Перечень информационных справочных систем и профессиональных баз данных


1.Образовательный портал [Электронный ресурс]. Режим доступа: http://www.intuit.ru/
2.ЭБС «Университетская библиотека on-line» [Электронный ресурс] Режим доступа:

39
3.ЭБС издательства «Лань» (коллекция «Инженерные науки») [Электронный ресурс]
Режим доступа: https://e.lanbook.com
4.ЭБС Юрайт [Электронный ресурс] Режим доступа: https://www.biblio-online.ru.
5.ЭБС elibrary (периодические издания) ООО "РУНЭБ" (г. Москва). [Электронный
ресурс]. Режим доступа: http://elibrary.ru
6. Банк данных угроз безопасности информации, ФСТЭК России, Режим доступа:
http://www.bdu.fstec.ru/ubi/threat
ЭБС «Национальный цифровой ресурс «Руконт»» (коллекция изданий Астраханского
государственного технического университета). [Электронный ресурс]. Режим доступа:
www.rucont.ru

Перечень программного обеспечения


1 OpenOffice, MS Office 365 - Программное обеспечение для работы с
электронными документами и базами данных
2 Visual Studio -Среда для разработки программных продуктов
3 Операционные системы Windows 7/8/10/Server 2012/Server 2016 (лицензионный
договор №1709-KMR от 19.09.2019г.)
4 Adobe Reader - Программа для просмотра электронных документов(Открытое
лицензионное соглашение GNU General Public License)
5 7-zip (Открытое лицензионное соглашение GNU GeneralPublicLicense)
6 Google Chrome, Mozilla FireFox, Opera (Открытое лицензионное соглашение GNU
7 Open Office (Apache Software Foundation)
8 LibreOffice (Открытое лицензионное соглашение GNU GPL)
9 Microsoft Office 2007/2010/2013/2016 (Договор № 07-S00036L от 12.07.2018)
10 Образовательный портал MOODLE (Открытое лицензионное соглашение GNU
1 Программное обеспечение WinWare и VirtualBox-виртуальные машины Linux,
12 Oracle Enterprise, 180 дней -Система управления реляционными базами данных,
13 PostgreSQL (бесплатная версия)

40
Приложение
Вопросы к зачету
1. Этапы развития информационных систем.
2. Понятие базы данных, СУБД. СУБД Oracle: основные возможности.
3. Что устанавливает параметр операционной среды SQL*PLUS PAGESIZE?
4. Какой командой (командами) можно получить удобочитаемое отображение данных по
запросу, если извлекается большое количество колонок таблицы?
5. Назначение и возможности программы SQL*Plus.
6. Настройка переменных среды, параметров сессии, режима отображения данных на
экране.
7. Редактирование команд. Сохранение команд для дальнейшего использования.
8. Что за параметр nls_date_format, как он устанавливается и для чего используется?
9. Особенности современных АС. Классификация задач, решаемых с использованием
СУБД.
10. Архитектура многопользовательских систем.
11. Модели данных –виды.
12. Алгоритм установки и деинсталляции СУБД Oracle, настройка. Как создать БД c
помощью графических утилит.
13. Реляционные операторы – дать определение.
14. Команды DML: Синтаксис. Использование раздела WHERE, GROUP BY и HAVING,
ORDER BY команды SELECT. Использование алиасов. Создание представлений –
предназначение этого объекта БД.
15. Реляционные операторы и Команды DML с ними связанные.
16. Использование запросов и подзапросов. Предикаты between, like, exists и др.
17. Типы данных Oracle.
18. Что такое ограничение целостности. Их типы.
19. Что такое ключ отношения? Для чего он предназначен? Какие типы ключей вы знаете?
20. Структурные связи (отношения) между объектами (уметь объяснить, что означают
связи «один-к-одному», «один-ко- многим» и «многие-ко-многим» на конкретных
отношениях проектируемой БД).
21. Как работает коррелированный запрос?
22. Как работает некоррелированный запрос?
23. Операторы DDL. Синтаксис команды create,alter
24. Как изменить структуру таблицы, переименовать ее или ее столбец, отключить
ограничение целостности?
25. Встроенные функции Oracle. Примеры применения. Как вернуть день недели
последнего дня месяца?
26. Этапы проектирования БД. Инфологическое проектирование.
27. Этапы проектирования БД. Даталогическое проектирование.
28. Как сформировать требования пользователей информационной системы во время
проектирования.
29. Модель в нотации IDEF0 может быть представлена 4 типами диаграмм. Какими?
30. Назовите основные компоненты диаграмм потоков данных.
31. Какие сущности называются зависимыми (или слабыми), для чего надо их выявлять?
Как они изображаются на диаграмме ЕR?
32. Что такое класс принадлежности? Как он обозначается на диаграмме?
33. Что такое - степень (мощность) связи?
34. Какие в нотации IDEF1X существуют виды связей? Какие символы используются для
отображения мощности связи в ERD?
35. Как понимаются термины: идентифицирующая связь и не идентифицирующая связь?
36. Средства автоматизации проектирования баз данных.
37. Логическое проектирование базы данных. Нормализация данных.
41
38. OLTP и OLAP-системы.
39. Язык PL/SQL. В чем преимущества перед SQL.
40. Типы данных PL/SQL.
41. Основные разделы блока PL/SQL. PL/SQL.
42. Обработка исключительных ситуаций.
43. PL/SQL. Условные операторы. Типы.
44. Программные конструкции PL/SQL.
45. Функции. Табличные (многозначные) функции .
46. Процедуры в PL/SQL. Синтаксис, правила создания. Пакеты.
47. Встроенные модули PL/SQL
48. Триггеры. Классификация. Триггер DML. Синтаксис.
49. Системные триггеры.
50. Триггеры замещения.
51. Триггеры DML. Проблема мутирующих таблиц. Примеры использования триггеров.
52. Разграничение доступа средствами СУБД Oracle.
53. Пользователи, типы.
54. Синтаксис создания пользователя, смены пароля ему.
55. Понятие роли, привилегии.
56. Выдача и отбор привилегий, ролей.
57. Архитектура Oracle. Основные фоновые процессы. Основные структуры памяти.
58. Формирование запросов для выборки данных с применением встроенных функций и
предикатов.
59. Синтаксис создания, назначения табличного пользовательского пространства.
60. Понятие транзакции. Команды управление транзакциями. Свойства транзакции.
61. Изучение PL/SQL. Типы данных. Создание процедур, функций, пакетов.
62. Стандарты и обзор нормативных документов в этой области защиты АС.
63. Проектирование защищенных баз данных.
64. Методы защиты на базе использования триггеров, ограничений целостности.

42

Вам также может понравиться