Академический Документы
Профессиональный Документы
Культура Документы
Методические указания
по выполнению лабораторных работ
Астрахань 2022
Автор(ы):Космачева И.М.
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. Зайти в приложение SQLplus, введя в приглашении логин с указанием логина
(администратор с привилегией) - sys as sysdba. Пароль не вводится, нажать на клавишу
Enter (т.к. действует аутентификация на уровне ОС, эту настройку лучше потом изменить,
тогда будет требоваться пароль при подключении как у всех пользователей )
Включить запись протокола (запись в текстовый файл всех действий пользователя –
выполняемые команды и их результат).
….
Spool off;
4
• Кодировка CL8MSWIN1251 говорит программе Oracle Net о том, что необходимо
конвертировать символьную информацию в эту кодировку. В Windows ее можно
установить и как переменную окружения, и в реестре в разделе, соответствующем
Oracle home.
Выполните команды:
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. Создать учетную запись с именем, содержащем в названии ФИО студента.
Предоставить ей необходимые права и квоты на пространство для дальнейшей работы
(пример см. ниже). Подключиться от имени нового пользователя. В дальнейшем все
задания выполнять на одном и том же АРМ в учебном классе от своей учетной записи в
БД.
CONNECT USER_1/PASS;
Контрольные вопросы.
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. Команды языка манипулирования данными.
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
---------- -----------------------------------------------
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).
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 ИВАНОВА
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. Включить запись протокола.
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. Использование триггеров.
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;
• Объявляется исключительная ситуация, которая при вызове выдает сообщение 'Ошибка
в программе'.
Контрольные вопросы.
1. Использование пакетов PL/SQL.
2. Объявление переменных стандартных типов.
3. Объявление констант.
4. Объявление типов пользователя и переменных этих типов.
5. Таблицы PL/SQL.
6. Использование атрибутов объектов базы данных при объявлении
переменных.
7. Использование курсоров.
8. Ввод значений пользователем.
9. Условные конструкции PL/SQL.
10. Использование исключений.
Контрольные вопросы.
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
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
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