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

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

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


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

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

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

Безопасность систем баз данных


методические указания
для практических занятий
для студентов специальностей (направлений)

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

Астрахань 2022
Составитель: Космачева И.М., доцент кафедры «Информационная безопасность»

Рецензент: зав. кафедрой «Информационная безопасность» доц. Давидюк Н.В.

Методическое пособие утверждено на заседании кафедры «Информационная безопасность»


31.08.2022г., протокол №7
План практик

Практика 1. SQL-запросы. Типы индексов. Правила их обслуживания и поддержки


безопасной работы. 6 ч.
Практика 2. Контрольная работа 1 (SQL-запросы) 2 ч.
Программируемые объекты (PL/SQL) 6 ч.
Контрольная работа 2 (программируемые объекты) 2 ч.

Практика 1.
Задание.
1. Изучить теоретический материал из лекций и дополнительных источников,
рекомендованных преподавателем.
2. Выполнить задания, представленные в приложении 1.
3. Пройти тестирование на портале. Примерные вопросы представлены в приложении 2.
4. Каждой подгруппе подготовить совместно доклад по теме: Типы индексов. Правила их
обслуживания и поддержки безопасной работы.
5. Представить доклад . Во время выступления представители подгруппы студенты второй
подгруппы готовят 5 вопросов по выступлению участников. На данные вопросы отвечают
студенты первой группы, не участвующие в устном представлении доклада. Капитан каждой
команды фиксирует полученные баллы за активность в специальной таблице, предоставленной
в приложении 3.
6. Выполнить тестовый вариант контрольной работы 1 из приложения 4.

Вопросы для самоконтроля

Тема Вопросы
Тема 1. SQL- 1. Понятие базы данных, СУБД. СУБД Oracle: основные возможности.
запросы. Типы Какие команды для создания пользователя и предоставления прав ему вы
индексов. знаете? Опишите синтаксис.
Правила их 2. Назначение и возможности программы SQL*Plus. Настройка
обслуживания и переменных среды, параметров сессии, режима удобочитаемого
поддержки отображения данных на экране, c использованием кириллицы.
безопасной 3. Ведение протокола работы в SQL*Plus. Какая команда для этого
работы. 6 ч. используется?
4.Что устанавливает параметр операционной среды SQL*PLUS
PAGESIZE? Какой командой (командами) можно получить
удобочитаемое отображение данных по запросу, если извлекается
большое количество колонок таблицы?
5. Редактирование команд. Сохранение команд в для дальнейшего
использования.
6. Подготовка скриптов.
7. Что за параметр nls_date_format, как он устанавливается и для чего
используется?
8. Команды DDL, ALTER TABLE, ALTER USER. Что такое ограничение
целостности, назначение и виды. Как изменить структуру таблицы,
переименовать ее или ее столбец, отключить ограничение целостности?
9. Типы данных Oracle, виды.
10. Реляционные операторы – дать определение и описать синтаксис их
реализации в SQL. Реляционные операторы и команды DML с ними
связанные.
11. Команды DML: Синтаксис. Использование раздела WHERE, GROUP
BY и HAVING, ORDER BY команды SELECT.
12.Использование алиасов. Создание представлений – предназначение
этого объекта БД.
13. Предикаты between, like, exists и др
14. Использование запросов и подзапросов..
15. Как работает коррелированный запрос?
16. Как работает некоррелированный запрос?
17. Операторы DDL. Синтаксис команды create,alter
18. Встроенные функции Oracle. Примеры применения. Как вернуть день
недели последнего дня месяца?

Практика 2.
Задание.
1. Изучить теоретический материал из лекций и дополнительных источников,
рекомендованных преподавателем.
2. Выполнить задания из индивидуального варианта контрольной работы 1 по теме:
SQL-запросы. Пример задания представлен в приложении 4.

Практика 3.
Задание.
1. Изучить теоретический материал из лекций и дополнительных источников,
рекомендованных преподавателем.
2. Выполнить задания, представленные в приложении 5.
3. Пройти тестирование на портале. Примерные вопросы представлены в
приложении 6.

Вопросы для самоконтроля

Тема Вопросы
Тема 2. 1. Язык PL/SQL. В чем преимущества перед SQL.
Программируемы 2. Типы данных PL/SQL.
е объекты 3. Основные разделы блока PL/SQL. PL/SQL.
(PL/SQL) 6 ч. 4. Обработка исключительных ситуаций.
5. PL/SQL. Условные операторы. Типы.
6. Программные конструкции PL/SQL.
7. Функции. Табличные (многозначные) функции .
8. Процедуры в PL/SQL. Синтаксис, правила создания. Пакеты.
9. Встроенные модули PL/SQL
10. Триггеры. Классификация. Триггер DML. Синтаксис.
11. Системные триггеры.
12. Триггеры замещения.
13. Триггеры DML. Проблема мутирующих таблиц. Примеры
использования триггеров.
Разграничение доступа средствами СУБД Oracle.
14. Понятие транзакции. Команды управление транзакциями. Свойства
транзакции.
Практика 4.
Задание.
1. Изучить теоретический материал из лекций и дополнительных источников,
рекомендованных преподавателем.
2. Выполнить задания из индивидуального варианта контрольной работы 2 по теме:
Программируемые объекты СУБД. Пример задания представлен в приложении 7.

Учебно-методическое и информационное обеспечение дисциплины


1. Космачева И.М. Методические указания для выполнения лабораторных работ по дисциплине
«Безопасность систем баз данных» для обучающихся по направлению 10.03.01
Информационная безопасность / Сост. АГТУ. 2020. [Электронный ресурс]. Режим доступа:
www.portal2.astu.org.
2. 1. Космачева И.М. Методические указания для выполнения практических работ по
дисциплине «Безопасность систем баз данных» для обучающихся по направлению 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» [Электронный ресурс] Режим доступа:
3.ЭБС издательства «Лань» (коллекция «Инженерные науки») [Электронный ресурс] Режим
доступа: https://e.lanbook.com
4.ЭБС Юрайт [Электронный ресурс] Режим доступа: https://www.biblio-online.ru.
5.ЭБС elibrary (периодические издания) ООО "РУНЭБ" (г. Москва). [Электронный ресурс].
Режим доступа: http://elibrary.ru
6. Банк данных угроз безопасности информации, ФСТЭК России, Режим доступа:
ЭБС «Национальный цифровой ресурс «Руконт»» (коллекция изданий Астраханского
государственного технического университета). [Электронный ресурс]. Режим доступа:

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


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 General
1 Программное обеспечение WinWare и VirtualBox-виртуальные машины Linux,
12 Oracle Enterprise, 180 дней -Система управления реляционными базами данных, Oracle
13 PostgreSQL (бесплатная версия)
Приложение 1
Задания для практики

1. Изучите структуру и описание таблиц в БД.

Таблица 1-Продавцы (Salespeople)

SNUM SNAME CITY COMM


1001 Peel London .12
1002 Serres San Jose .13
1004 Motika London .11
1007 Rifkin Barcelona .15
1003 Axelrod New York .10

Таблица 2-Заказчики (Customers)

CNUM CNAME RATING CITY SNUM


2001 Hoffman 100 London 1001
2002 Giovanni 200 Rome 1003
2003 Liu 200 San Jose 1002
2004 Grass 300 Berlin 1002
2006 Clemens 100 London 1001
2008 Cisneros 300 SanJose 1007
2007 Pereira 100 Rome 1004

Таблица 3 - Порядки (Orders)

ONUM AMT ODATE CNUM SNUM


3001 18.69 10/03/1990 2008 1007
3003 767.19 10/03/1990 2001 1001
3002 1900.1 10/03/1990 2007 1004
0
3005 5160.4 10/03/1990 2003 1002
5
3006 1098.1 10/03/1990 2008 1007
6
3009 1713.2 10/04/1990 2002 1003
3
3007 75.75 10/04/1990 2004 1002
3008 4723.0 10/05/1990 2006 1001
0
3010 1309.9 10/06/1990 2004 1002
5
3011 9891.8 10/06/1990 2006 1001
8

Описание таблиц 1-3:


Продавцы (Salespeople)
ПОЛЕ СОДЕРЖАНИЕ
--------- ----------------------------------------------
snum уникальный номер, назначенный каждому продавцу
sname имя продавца.
city расположение продавца ( город ).
comm комиссионные продавцов в десятичной форме.

Заказчики (Customers)
ПОЛЕ СОДЕРЖАНИЕ
-------- ---------------------------------------------------
cnum уникальный номер, назначенный каждому заказчику.
cname имя заказчика.
city расположение заказчика ( город ).
rating уровень предпочтения данного заказчика перед другими.
snum номер продавца, назначенного этому заказчику (из табл. Продавцов )

Порядки (Orders)
ПОЛЕ СОДЕРЖАНИЕ
--------- ---------------------------------------------------
onum уникальный номер заказа, данный каждому приобретению.
amt значение суммы приобретений.
odate дата приобретения.
cnum номер заказчика, делающего приобретение ( из табл. Заказчиков).
snum номер продавца, продающего приобретение ( из табл. Продавцов).

2. Проверьте правильность команд создания и заполнения таблиц. В случае нахождения


ошибок и недочетов, внести изменения через команду Alter table.

create table Salespeople(snum integer primary key,sname varchar(10),city varchar(15),comm


number(3,2));

create table Customers(cnum integer primary key,cname varchar(10),CITY varchar(15),rating


number(3),snum references Salespeople);

create table Orders(onum integer primary key, amt number(7,2),odate date, cnum integer references
customers, snum integer references salespeople);

insert into Salespeople values (1001,'Peel','London',0.12);


insert into Salespeople values (1002,'Serres','San Jose',0.13);
insert into Salespeople values (1002,'Serres','San Jose',0.13);
insert into Salespeople values (1004,'Motika','London',0.11);
insert into Salespeople values (1007,'Rifkin','Barcelona',0.15);
insert into Salespeople values (1003,'Axelrod','New York',0.10);

insert into Customers values (2001,'Hoffman','London',100,1001);


insert into Customers values (2002,'Giovanni','Rome',200,1003);
insert into Customers values (2003,'Liu','San Jose',200,1002);
insert into Customers values (2004,'Grass','Berlin',300,1002);
insert into Customers values (2006,'Clemens','London',100,1001);
insert into Customers values (2008,'Cisneros','San Jose',300,1007);
insert into Customers values (2007,'Pereira','Rome',100,1004);

insert into Orders values (3001,18.69,'10.03.1990',2008,1007);


insert into Orders values (3002,1900.10,'10.03.1990',2007,1004);
insert into Orders values (3003,767.19,'10.03.1990',2001,1001);
insert into Orders values (3005,5160.45,'10.03.1990',2003,1002);
insert into Orders values (3006,1098.16,'10.03.1990',2008,1007);
insert into Orders values (3009,1713.23,'10.04.1990',2002,1003);
insert into Orders values (3007,75.75,'10.04.1990',2004,1002);
insert into Orders values (3008,4723.00,'10.05.1990',2006,1001);
insert into Orders values (3010,1309.95,'10.06.1990',2004,1002);
insert into Orders values (3011,9891.88,'10.06.1990',2006,1001);

commit;

3. Выполнить запросы к БД:

1. Выберите всех заказчиков из SanJose, рейтинг которых не меньше 200.


2. Напишите запрос который может дать вам все заказы со значениями суммы выше чем
$1,000.
3. Напишите запрос который может выдать вам поля sname и city для всех продавцов в
Лондоне с комиссионными выше .10.
4. Напишите запрос к таблице Заказчиков чей вывод может включить всех заказчиков с
оценкой =< 100, если они не находятся в Риме.
5. Что может быть выведено в результате следующего запроса ?
6. SELECT * FROM Orders WHERE (amt < 1000 OR NOT (odate = 10/03/1990 AND cnum >
2003 ));
7. Как можно проще переписать такой запрос ?
8. SELECT snum, sname, city, comm FROM Salespeople WHERE ( comm > + .12 OR comm
< .14 );
9. Напишите два запроса которые могли бы вывести все заказы на 3 или 4 Октября 1990.
10. Напишите запрос который выберет всех заказчиков, обслуживаемых продавцами Peel
или Motika.
11. Напишите запрос, который может вывести всех заказчиков, чьи имена начинаются с
буквы, попадающей в диапазон от A до G.
12. Напишите запрос который выберет все заказы, имеющие нулевые значения или NULL в
поле amt (сумма).
13. Напишите запрос, который сосчитал бы все суммы приобретений на 3 Октября.
14. Напишите запрос, который сосчитал бы число различных не-NULL значений поля city в
таблице Заказчиков.
15. Напишите запрос, который выбрал бы наименьшую сумму для каждого заказчика.
16. Напишите запрос, который бы выбирал заказчиков в алфавитном порядке, чьи имена
начинаются с буквы G.
17. Напишите запрос, который выбрал бы высшую оценку в каждом городе.
18. Напишите запрос, который сосчитал бы число заказчиков, регистрирующих каждый день
свои заказы. (Если продавец имел более одного заказа в данный день, он должен учитываться
только один раз.)

Дополнительное задание.
1. Запишите команду для создания таблиц с описанной структурой :

Имя таблицы Имя поля Тип поля Примечание


FAKULTET KOD_F Integer PRIMARY KEY
NAZV_F Char, 30
SPEC KOD_S Integer PRIMARY KEY

KOD_F Integer FOREIGN KEY


NAZV_S Char, 50
STUDENT KOD_STUD Integer PRIMARY KEY
KOD_S Integer FOREIGN KEY
FAM Char, 30
IM Char, 15
OT Varchar, 15
STIP Number 5, 2
BALL Number (5,2) 0≤BALL≤100
DATA_ROZD Date

Составить запросы к БД:


№1. Выбрать студентов, получающих стипендию, равную 150.
№2. Выбрать студентов, имеющих балл от 82 до 90. Студенты должны быть отсортированы в
порядке убывания балла.
№3. Выбрать студентов, фамилии которых не начинаются с буквы «А».
№4. Подсчитать средний балл на каждом факультете.
№5. Подсчитать количество студентов, обучающихся на каждом факультете. Вывести в запросе
название факультета, комментарий – «обучается», количество студентов, комментарий
«человек».
№6. Вывести список студентов с указанием факультета и специальности, на которых они
учатся. Упорядочить студентов по факультетам, специальностям, фамилиям.
№7.Определить, кто учится на специальности, к которой относится студент «Асанов».
№8. Показать, какие специальности встречаются в таблице STUDENT. Дубликаты исключить.
Вывести в запросе названия специальностей.
№9. Подсчитать количество студентов, получающих стипендию.
№10. Показать, максимальный балл студента, обучающегося на каждой специальности.
№11. Подсчитать количество специальностей каждого факультета и вывести результат, для тех,
у которых число специальностей >2.
№12. Подсчитать количество однофамильцев на каждом факультете. В запросе в алфавитном
порядке вывести фамилию однофамильцев, количество однофамильцев и название факультета.
№13. Выбрать студентов, получающих максимальную или минимальную стипендию по
факультету. В запросе отобразить факультет, фамилию студента, упорядочив вывод данных по
полю размер STIP.
№14. Выбрать студентов, имеющих балл от 50 до 90. Студенты должны быть отсортированы в
порядке убывания балла с указанием специальности.
№15. Выбрать студентов, в фамилии которых встречается буквосочетание «св». Вывести их,
отсортировав по алфавиту.
№16. Подсчитать средний балл на каждой специальности, информацию представить с
указанием названия специальности в алфавитном порядке и не выводить специальности, для
которых средний балл ниже 50.
№17. Подсчитать количество студентов, обучающихся на факультете, код которого не
совпадает с 1 или 8. Вывести в запросе название факультета, комментарий – «обучается»,
количество студентов, комментарий «человек».
№18. Подсчитать студентов, обучающихся на нескольких специальностях. Вывести в запросе
их фамилии с указанием специальностей, на которых они обучаются.
№19.Определить, кто учится на специальности, к которой относится студент «Асанов» и во
сколько раз их стипендия больше (меньше), чем у Асанова. Добавить комментарий в запросе в
виде: ‘студент’ fam, im, ot ‘получает стипендию, которая’, ’ больше (меньше), чем у Асанова в’,
…‘раз’ .
№20. Показать, каков возраст студентов, обучающихся на факультете экономики. Упорядочить
студентов по возрасту.
№21. Подсчитать количество студентов, получающих стипендию, превышающую ту, которая
выплачивается студентам с максимальным проходным баллом по своей специальности.
№22. Показать максимальный балл студента на специальности, которая имеет самый низкий
проходной балл.
№23. Подсчитать количество специальностей каждого факультета и вывести результат, для тех,
у которых число специальностей >2.
№24. Подсчитать количество однофамильцев на каждом факультете. В запросе в алфавитном
порядке вывести фамилии однофамильцев, количество однофамильцев и название факультета,
на котором они учатся.
Приложение 2

Вопросы для тестирования

1. Совокупность структур данных и операций их обработки - это _______.


2. Установите соответствие между строками двух колонок:
1.Atomicity (неделима) A. Не нарушает бизнес-логику и отношения
между элементами данных.
2.Consistency B. Представляет собой единое целое.
(согласована)
3.Durability (устойчива) С. Результаты не зависят от предыдущих или
последующих транзакций.
4.Isolation (изолирована) D. После фиксации транзакции изменения
становятся постоянными.

3. Перечислите реляционные операторы, применение которых требует совместимости по


типу для отношений.
4. Применим ли реляционный оператор INTERSECT к отношениям, и что он возвратит в
таком случае?

5. Какие ключевые слова используются при составлении запроса для реализации


операторов:
• Выборка.
• Соединение.
• Деление.
• Объединение.

6. Какую кодировку для отображения русских символов используют графические


приложения Windows, и как она задается для консольных приложений?

7. Дать определение понятию:


A. Отношение .
B. Сущность .
C. Атрибут.
D. Домен.
8. Описать назначение команд:

Команда
CONNECT имя/пароль
SPOOL путь и имя файла

SPOOL OFF|ON (APPEND)


DESCRIBE
COLUMN название_столбца FORMAT An
COLUMN название_столбца FORMAT 9_9.9_9
SET LINESIZE n
SET PAGESIZE n
SET COLUMN название_столбца HEADING псевдоним
CLEAR COLUMNS
SET SERVEROUTPUT ON
@название_файла

9. Перечислить команды SQL, относящиеся к соответствующей группе:


A. операторы определения данных (DDL)
B. операторы манипуляции данными (DML)
C. операторы определения доступа к данным (DCL)
D. операторы управления транзакциями ( TCL)

10. Перечислите ограничения целостности данных.

11. Укажите какие ограничения целостности были установлены при создании таблицы :
CREATE TABLE Customers
(cnum integer NOT NULL PRIMARY KEY, cname char(10) NOT NULL, city char(10),
rating integer CHECK (rating BETWEEN 0 AND 100), snum integer REFERENCES
Salespeople ON DELETE SET NULL);

12. SELECT [ALL | DISTINCT] <список_выбора | *> FROM <имя_таблицы>, ... [ WHERE
<условие> ] [ GROUP BY <имя_столбца>,...] [ HAVING <условие> ] [ORDER BY
<имя_столбца> [ASC | DESC],... ]/
Поясните применение в команде SELECT слов ALL , DISTINCT, *, ASC , DESC

13. Перечислите для задания основных условий поиска используемые символы, слова в
SQL-запросе:
A. Сравнение:
B. Диапазон :
C. Принадлежность к множеству:
D. Соответствие шаблону:
E. Значение NULL

14. С подзапросами могут использоваться такие ключевые слова: ALL, АNY, SOME. Каков
их смысл?
15. Какой из следующих SQL-операторов удаляет все строки в таблице, не записывая в
журнал факт удаления отдельных строк?
A. UPDATE
B. REVOKE
C. DROP
D. TRUNCATE
E. DELETE

16. Какая команда в СУБД Oracle приведет к автоматическому удалению значений в полях
ссылках:
A. create table y(b number references x(a) on delete set null);
B. create table y(b number references x(a) on delete cascade);
C. create table y(b number references x(a) delete of x restricted);
D. drop table y cascade constraints?

17. Выберите команду (-ы), необходимые для выполнения удаления столбца в таблице,
переименования столбца таблицы, удаления таблицы?
a. drop table 
b. alter table
c. update
d. rename table

18. Укажите, какие ограничения целостности будут нарушены при выполнении вставки данных
во второй или третьей команде:

CREATE TABLE Customers (cnum integer PRIMARY KEY, cname char(10) NOT NULL, city
char(10), rating integer CHECK (rating BETWEEN 0 AND 100),  snum  integer REFERENCES
Salespeople ON   DELETE SET NULL);
INSERT INTO Customers  values (1, 'Ivan', 'Sochi',300, null);
INSERT INTO Customers  values (1, null, 'Astrakhan',108,5);

Выберите один или несколько ответов.


A. check
B. b. первичный ключ
C. c. unique
D. внешний ключ

19. Перечислить команды SQL, относящиеся к соответствующей группе DML


Выберите один или несколько ответов:
A. delete
B. select
C. drop
D. update
E. create
F. alter
G. grant
H. insert

20. Какая команда обеспечит автоматическое удаление строк в дочерних таблицах при
удалении строки в родительской? Выберите один или несколько ответов
a. drop table y cascade constraints
b. create table y(b number references x(a) on delete set null);
c. create table y(b number references x(a) on delete cascade);
d. create table y(b number references x(a) delete of x restricted);

21. Системы управления базами данных – это:


A. программное средство для автоматизации вычислений;
B. совокупность языковых и программных средств, предназначенных для создания, ведения
и совместного использования БД многими пользователями и ее защита;
C. система для представления информационных массивов во внешней памяти ПК;
D. система для визуализации и модифицирования графических объектов ;

22. Установите соответствие между основными понятиями в СУБД и их описанием:

1. Отношение
2. Атрибуты
3. Сущность
4. Домен

A. двумерная таблица, содержащая некоторые данные, множество упорядоченных


кортежей.
B. объект любой природы, данные о котором хранятся в БД.
C. множество всех возможных значений определенного атрибута
D. свойства, которые характеризуют сущность.

23. Как обозначается группа команд SQL, что позволяет выполнять различные операции с
базой данных, такие как CREATE (создание), ALTER (изменение) и DROP (удаление
объектов).
A. DDL.
B. DML.
C. DCL.
24. Какие ключевые слова используются при составлении запроса на SQL для реализации
реляционных операторов. Сопоставьте названию оператора ключевое слово:
1. Объединение
2. Соединение
3. Деление
4. Выборка

A. union, 
B. exists,
C. where, 
D. join
E. cross join

25. Какие функции  относятся к функциям группирования:


Выберите один или несколько ответов:
a. Round
b. Sum
c. Count
d. Group
e. Variance
f. Min

26. Какая часть строки в запросе приведет к появлению ошибки?


SELECT FACULTY, AVG(ALL POINTS), COUNT(*) “NUMBER OF STUDENTS” FROM
STUD , DEPT WHERE COUNT(*) > 5 GROUP BY FACULTY ORDER BY 2 DESC;
Выберите один или несколько ответов:
a. group by faculty
b. where count (*) > 5
c. select faculty, avg(all points), count(*) 'number of students'
d. order by 2 desc;

27. Какие из следующих ключевых слов используются в конструкции order by?


A. abs
B. asc
C. desc
D. disc

28. В СУБД Oracle выполняется приведенный ниже оператор.


SELECT DECODE (EMPNO,38475, ’TERMINATED’, 60494, ’LOA’, ’ACTIVE’) FROM EMP;
Что будет выдано, если для EMPNO выбрано значение 60494?
A. 60494
B. loa
C. terminated
D. active.

29. Для чего служит функция Oracle - NVL()?


A. позволяет указать альтернативные выходные данные вместо NULL-значений столбцов.
B. делает значения выходных данных столбцов недействительными.
C. позволяет указать альтернативные выходные данные вместо не -NULL-значений
столбцов.

30. Вы хотите получить информацию о всех служащих, фамилии которых Смит. Но Вы не


уверены, в каком регистре они сохранены. Какой оператор перечислит всех служащих, фамилия
которых - Смит?
A. Select fam, name FROM emp WHERE fam= ‘smith’;
B. Select fam, name FROM emp WHERE UPPER (fam)= ‘smith’;
C. Select fam, name FROM emp WHERE fam=UPPER (‘smith’);
D. Select fam, name FROM emp WHERE LOWER (fam)= ‘smith’.

31. В системах управления базами данных MySQL, PostgreSQL: данные хранятся в отношениях.
К какому типу относится такая СУБД - реляционная или NoSQL?

32. Тип данных char(10) может хранить только строку фиксированной длины не более заданной.
Верно ли это?  Укажите  в скобках длину строки и единицу измерения через пробел).

33. Тип данных varchar(10) может хранить строку любой длины не более ____. Закончите фразу,
указав размер и единицу измерения через пробел.

34. Как называется процесс реорганизации данных в реляционной БД путем ликвидации


повторяющихся групп и иных противоречий при их хранении с целью приведения таблиц к
виду, позволяющему осуществлять непротиворечивое и корректное редактирование данных?
В столбце таблицы СУБД Oracle, с типом данных number(5,-2) как будет представлено число
1209,2.
35. Данное ограничение целостности (constraints) используют для предотвращения действий,
которые разрушают связи между дочерней и родительской таблицами. Запишите принятое для
него обозначение.

36. Существует два типа подзапросов, а именно?

37. Используются при построении запросов, в которых происходит самосоединение таблицы,


для того, чтобы дать временное имя таблице или столбцу. Что это?

CREATE TABLE USERS (id INT, name VARCHAR (20) NOT NULL UNIQUE, PRIMARY KEY
(id));
Какое поле используется в качестве первичного ключа?

38. CREATE TABLE order ( order_id INT NOT NULL, user_id INT, PRIMARY KEY (order_id),
FOREIGN KEY (user_id) REFERENCES users(id));
На основе имеющегося кода скажите, созданная таблица является родительской или дочерней?

39. SELECT * FROM user WHERE name LIKE '_test%';


Выберется ли строка в запросе, если в поле name содержится строка test?

40. SELECT email, COUNT(email)


FROM customers
GROUP BY email
where COUNT(email) > 1;
Верно ли составлен запрос?

41. Как называется переменная, отвечающая за языковые настройки клиента Oracle ?

42. Перечислите по алфавиту и через запятую реляционные операторы, применение которых к


отношениям требует совместимости их по типу.

43. Укажите через запятую неверный (-ые) SQL-оператор (-ы):


1.SELECT lastname, avg(salary), empid FROM employee group by lastname;
2.SELECT lastname, avg(salary), empid FROM employee group by lastname, empid.
3.SELECT lastname, avg(salary), empid FROM employee;

44. Запишите команду для изменения формата отображения даты на время сессии как в
примере:
Wen 12/07/1974 14:05:22

45. Какая функция возвращает текущую дату в Oracle?

46. В каких единицах измерения возвращается результат запроса с разностью дат:


Select sysdate - data_rozd from employees ?

47. Как ограничение целостности может предупредить ввод данных в таблицу, определяемых с
помощью правила как некорректных?

48. Какая команда инициализирует запись протокола работы SQL*Plus в текстовый файл,
расположенный по указанному пути?
49. Какая команда может запустить на выполнение SQL скрипт?
Приложение 3

Форма таблицы для внесения результатов активностей студентов

Подгруппа ФИО Задание Балл по 5-


балльной шкале
Устный доклад
Вопрос докладчику
Ответ на вопрос
Приложение 4

Контрольная работа 1. Тестовый вариант

1Создать три таблицы, содержащие:


- список сотрудников с размером текущего счета;
- прейскурант товаров,
- сведения о продажах товаров сотрудниками.

Пример команд, определяющих структуру данных главных таблиц-справочников БД:


-- данные по сотрудникам и их счетам
create table sotr_account (code_sotr integer, name_sotr char(25), account_size number);

-- прейскурант фирмы
create table assortiment(code_tovar integer ,name_tovar char(25), price_tovar number);

insert into assortiment values(1,'компьютер',50);


insert into assortiment values(2,'принтер',70);
insert into assortiment values(3,'сканер',45);
insert into assortiment values(4,'модем',40);

3. С помощью команды ALTER TABLE добавить необходимые ограничения целостности,


атрибуты, а также выбрать оптимальные типы данных.
4. Пример команд, вносящих данные в таблицы использовать для написания команд по
внесению данных в дочернюю таблицу (сведения о продажах товаров сотрудниками;):
insert into sotr_account values(1,'Кириллова',3000);
insert into sotr_account values(2,'Владимирский',2000);
insert into sotr_account values(3,'Васильева',200);
insert into sotr_account values(4,'Петров',400);
insert into sotr_account values(5,'Михайлова',3000);
insert into sotr_account values(6,'Александрова',200);
insert into sotr_account values(7,'Князев',200);
insert into sotr_account values(8,'Сидоров',300);
insert into sotr_account values(9,'Иванов',1000);
insert into assortiment values(1,'компьютер',50);
insert into assortiment values(2,'принтер',70);
insert into assortiment values(3,'сканер',45);
insert into assortiment values(4,'модем',40);
5. Написать команду для создания дочерней таблицы, содержащей сведения о продажах
товаров сотрудниками и команды для ее заполнения следующими значениями:

Код Код товара Количество товара


Сотрудника (1..40, по умолчанию 4)
1 4 10
2 3 12
2 4 22
2 3 1
4 2 2
5 3 3
1 2 24
5 1 7
9 1 3
6. Выполнить следующие операции над базой данных:
 Вывести на экран количество товаров, проданных сотрудниками, имеющими на
счету менее 350 у.е., упорядоченный по фамилии продавца в алфавитном порядке.
 Изменить сотрудникам размер счета на величину реализации товара
 Добавить в таблицу SOTR увеличенные на 22 коды тех сотрудников из таблицы
продаж, у которых имеются товары численностью от 10 до 20.
 Рассчитать сумму реализации модемов
4. Прикрепить файл с протоколом выполнения контрольной работы на портал.
Приложение 5
Задания к практике

1. Выполнить задание ниже:

2. Сравнить синтаксис написания триггеров в СУБД MS SQL, PostgreSQL, перевести код


программных модулей на тот, который используют в этих СУБД.
3. Придумать задачу для применения системного триггера в БД, написать программу его для
создания для СУБД Oracle, MS SQL, PostgreSQL. Ниже представлен синтаксис создания
триггеров с в MS SQL

Пример 1. Использование триггера для реализации ограничений на значение. В добавляемой в


таблицу Сделка записи количество проданного товара должно быть не больше, чем его остаток
из таблицы Склад.

Команда вставки записи в таблицу Сделка может быть, например, такой:

INSERT INTO Сделка


VALUES (3,1,-299,'01/08/2002')

Создаваемый триггер должен отреагировать на ее выполнение следующим образом:


необходимо отменить команду, если в таблице Склад величина остатка товара оказалась
меньше продаваемого количества товара с введенным кодом (в примере код товара=3 ). Во
вставляемой записи количество товара указывается со знаком "+", если товар поставляется, и со
знаком "-", если он продается. Представленный триггер настроен на обработку только одной
добавляемой записи.
CREATE TRIGGER Триггер_ins
ON Сделка FOR INSERT
AS
IF @@ROWCOUNT=1
BEGIN
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.количество<=ALL(SELECT
Склад.Остаток
FROM Склад,Сделка
WHERE Склад.КодТовара=
Сделка.КодТовара))
BEGIN
ROLLBACK TRAN
PRINT
'Отмена поставки: товара на складе нет'
END
END

Пример 2. Использование триггера для сбора статистических данных.

Создать триггер для обработки операции вставки записи в таблицу Сделка, например, такой


команды:

INSERT INTO Сделка


VALUES (3,1,200,'01/08/2002')

поставляется товар с кодом 3 от клиента с кодом 1 в количестве 200 единиц.

При продаже или получении товара необходимо соответствующим образом изменить


количество его складского запаса. Если товара на складе еще нет, необходимо добавить
соответствующую запись в таблицу Склад. Триггер обрабатывает только одну добавляемую
строку.

ALTER TRIGGER Триггер_ins


ON Сделка FOR INSERT
AS
DECLARE @x INT, @y INT
IF @@ROWCOUNT=1
--в таблицу Сделка добавляется запись
--о поставке товара
BEGIN
--количество проданного товара должно быть не
--меньше, чем его остаток из таблицы Склад
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.количество<
=ALL(SELECT Склад.Остаток
FROM Склад,Сделка
WHERE Склад.КодТовара=
Сделка.КодТовара))
BEGIN
ROLLBACK TRAN
PRINT 'откат товара нет '
END
--если записи о поставленном товаре еще нет,
--добавляется соответствующая запись
--в таблицу Склад
IF NOT EXISTS ( SELECT *
FROM Склад С, inserted i
WHERE С.КодТовара=i.КодТовара )
INSERT INTO Склад (КодТовара,Остаток)
ELSE
--если запись о товаре уже была в таблице
--Склад, то определяется код и количество
--товара из добавленной в таблицу Сделка записи
BEGIN
SELECT @y=i.КодТовара, @x=i.Количество
FROM Сделка С, inserted i
WHERE С.КодТовара=i.КодТовара
--и производится изменения количества товара в
--таблице Склад
UPDATE Склад
SET Остаток=остаток+@x
WHERE КодТовара=@y
END
END

Пример 3. Создать триггер для обработки операции удаления записи из таблицы Сделка,


например, такой команды:

DELETE FROM Сделка WHERE КодСделки=4

Для товара, код которого указан при удалении записи, необходимо откорректировать его
остаток на складе. Триггер обрабатывает только одну удаляемую запись.

CREATE TRIGGER Триггер_del


ON Сделка FOR DELETE
AS
IF @@ROWCOUNT=1 -- удалена одна запись
BEGIN
DECLARE @y INT,@x INT
--определяется код и количество товара из
--удаленной из таблицы Склад записи
SELECT @y=КодТовара, @x=Количество
FROM deleted
--в таблице Склад корректируется количество
--товара
UPDATE Склад
SET Остаток=Остаток-@x
WHERE КодТовара=@y
END
Пример 4. Создать триггер для обработки операции изменения записи в таблице Сделка,
например, такой командой:

UPDATE Сделка SET количество=количество-10


WHERE КодТовара=3

во всех сделках с товаром, имеющим код, равный 3, уменьшить количество товара на 10


единиц.

Указанная команда может привести к изменению сразу нескольких записей в таблице Сделка.


Поэтому покажем, как создать триггер, обрабатывающий не одну запись. Для каждой
измененной записи необходимо для старого (до изменения) кода товара уменьшить остаток
товара на складе на величину старого (до изменения) количества товара и для нового (после
изменения) кода товара увеличить его остаток на складе на величину нового (после изменения)
значения. Чтобы обработать все измененные записи, введем курсоры, в которых сохраним все
старые (из таблицы deleted ) и все новые значения (из таблицы inserted ).

CREATE TRIGGER Триггер_upd


ON Сделка FOR UPDATE
AS
DECLARE @x INT, @x_old INT, @y INT, @y_old INT
-- курсор с новыми значениями
DECLARE CUR1 CURSOR FOR
SELECT КодТовара,Количество
FROM inserted
-- курсор со старыми значениями
DECLARE CUR2 CURSOR FOR
SELECT КодТовара,Количество
FROM deleted
OPEN CUR1
OPEN CUR2
-- перемещаемся параллельно по обоим курсорам
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
WHILE @@FETCH_STATUS=0
BEGIN
--для старого кода товара уменьшается его
--количество на складе
UPDATE Склад
SET Остаток=Остаток-@y_old
WHERE КодТовара=@x_old
--для нового кода товара, если такого товара
--еще нет на складе, вводится новая запись
IF NOT EXISTS (SELECT * FROM Склад
WHERE КодТовара=@x)
INSERT INTO Склад(КодТовара,Остаток)
VALUES (@x,@y)
ELSE
--иначе для нового кода товара увеличивается
--его количество на складе
UPDATE Склад
SET Остаток=Остаток+@y
WHERE КодТовара=@x
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2

В рассмотренном триггере отсутствует сравнение количества товара при изменении записи о


сделке с его остатком на складе.

Пример 5. Исправим этот недостаток. Для генерирования сообщения об ошибке используем в


теле триггера команду MS SQL Server RAISERROR, аргументами которой являются текст
сообщения, уровень серьезности и статус ошибки.

ALTER TRIGGER Триггер_upd


ON Сделка FOR UPDATE
AS
DECLARE @x INT, @x_old INT, @y INT,
@y_old INT ,@o INT
DECLARE CUR1 CURSOR FOR
SELECT КодТовара,Количество
FROM inserted
DECLARE CUR2 CURSOR FOR
SELECT КодТовара,Количество
FROM deleted
OPEN CUR1
OPEN CUR2
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @o=остаток
FROM Склад
WHERE кодтовара=@x
IF @o<-@y
BEGIN
RAISERROR('откат',16,10)
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2
ROLLBACK TRAN
RETURN
END
UPDATE Склад
SET Остаток=Остаток-@y_old
WHERE КодТовара=@x_old
IF NOT EXISTS (SELECT * FROM Склад
WHERE КодТовара=@x)
INSERT INTO Склад(КодТовара,Остаток)
VALUES (@x,@y)
ELSE
UPDATE Склад
SET Остаток=Остаток+@y
WHERE КодТовара=@x
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2

Пример 6. В примере 5 происходит отмена всех изменений при невозможности реализовать


хотя бы одно из них. Создадим триггер, позволяющий отменять изменение только некоторых
записей и выполнять изменение остальных.

В этом случае триггер выполняется не после изменения записей, а вместо команды изменения.

ALTER TRIGGER Триггер_upd


ON Сделка INSTEAD OF UPDATE
AS
DECLARE @k INT, @k_old INT
DECLARE @x INT, @x_old INT, @y INT
DECLARE @y_old INT ,@o INT
DECLARE CUR1 CURSOR FOR
SELECT КодСделки, КодТовара,Количество
FROM inserted
DECLARE CUR2 CURSOR FOR
SELECT КодСделки, КодТовара,Количество
FROM deleted
OPEN CUR1
OPEN CUR2
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @o=остаток
FROM Склад
WHERE КодТовара=@x
IF @o>=-@y
BEGIN
RAISERROR('изменение',16,10)
UPDATE Сделка SET количество=@y,
КодТовара=@x
WHERE КодСделки=@k

UPDATE Склад
SET Остаток=Остаток-@y_old
WHERE КодТовара=@x_old
IF NOT EXISTS (SELECT * FROM Склад
WHERE КодТовара=@x)
INSERT INTO Склад(КодТовара, Остаток)
VALUES (@x,@y)
ELSE
UPDATE Склад
SET Остаток=Остаток+@y
WHERE КодТовара=@x
END
ELSE
RAISERROR('запись не изменена',16,10)
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old
END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2

Варианты индивидуальных дополнительных заданий:

1. Создать триггер в таблице department. При появлении нового отдела в таблице


department проверять, менеджеров (mgrno), чтобы каждый менеджер управлял не более
чем одним отделом, иначе выдавать сигнал и/или сообщение. Атрибут deptno должен
быть неуникальным.
2. Создать триггер в таблице emp_act. При выдаче служащему нового задания в проекте
проверять, чтобы новое задание не совпадало по срокам с теми которые уже назначены
данному служащему, иначе выдавать сигнал и/или сообщение.
3. Создать дополнительную таблицу bonus(empno, persent_bonus), где persent_bonus –
процент премиальных. Создать триггер в таблице bonus, который при изменении
процента премиальных для данного служащего будет изменять сумму премиальных в
таблице employee.
4. Создать триггер в таблице project. При создании нового проекта проверять, чтобы этот
проект принадлежал не более чем одному надпроекту (majproj), иначе выдавать сигнал
и/или сообщение. Столбец projno должен быть неуникальным.
5. Создать дополнительную таблицу summa(sales_person, sum), где sum содержит общее
количество продаж для данного продавца, вычисленное как сумма значений в колонке
sales таблицы sales. Создать триггер в таблице sales. При появлении новой записи в
таблице sales, триггер вычисляет общую сумму продаж для данного служащего и
записывает значение в таблицу summa.
6. Создать дополнительную таблицу time_rest(projno, time), где time – время, оставшееся до
окончания данного проекта. Создать триггер в таблице time_rest, который будет
вычислять время до окончания проекта в днях и записывать его в соответствующую
ячейку столбца time, при выполнении операции update в таблице emp_act.
7. Создать дополнительную таблицу comm(empno, persent_comm), где persent_comm –
процент комиссионных. Создать триггер в таблице comm, который при изменении
процента комиссионных для данного служащего будет изменять сумму комиссионных в
таблице employee.
8. Создать дополнительную таблицу hire(empno, hire_year), где hire_year – количество
отработанных лет. Создать триггер в таблице employee, который при удалении
сотрудника из таблицы будет вычислять количество лет, которые он отработал до
увольнения.
9. Создать дополнительную таблицу responsibility(respemp, count_resp), где count_resp –
количество проектов, за которые данный служащий несет ответственность. Создать
триггер в таблице project, который при создании нового проекта вычисляет количество
проектов у данного ответственного служащего и изменяет соответствующее значение в
таблице responsibility.
10. Создать дополнительную таблицу birthdate(empno, birthdate, month, day), где month –
количество месяцев (дробное) до дня рождения, day – количество дней до дня рождения.
Создать триггер в таблице employee, который вычисляет количество месяцев и
количество дней до дня рождения при выполнении операции insert в таблицу employee.
11. Создать дополнительную таблицу sales_region(region, sum_sales), где sum_sales – общая
сумма продаж для данного региона, вычисленная как сумма значение столбца sales
таблицы sales. Создать в таблице sales триггер, который увеличивает количество продаж
в данном регионе на соответствующее значение при добавлении новой продажи.
12. Создать дополнительную таблицу age(empno, count_age), где count_age – количество лет
стажа для данного сотрудника. Создать триггер в таблице employee, который при
добавлении нового сотрудника, будет вычислять количество лет стажа у данного
сотрудника и заносить в таблицу age. Стаж вычисляется следующим образом: текущий
возраст - (7+edlevel).
13. Создать дополнительную таблицу time_activity(empno, actno, time_rest), где time_rest –
время, оставшееся до сдачи данного задания служащим. Создать триггер, который будет
вычислять время до сдачи задания служащим в днях и месяцах (дробное) и записывать
его в в таблицу time_activity, при выполнении операции update в таблице emp_act.
14. Создать триггер в таблице project, который будет контролировать количество
подпроектов в главном проекте (majproj). Количество подпроектов не должно
превышать 5. Триггер вызывается операцией insert.
15. Создать триггер в таблице employee. При создании нового служащего проверять, чтобы
у этого служащего был не более чем один начальник иначе выдавать сигнал и/или
сообщение. Столбец empno должен быть неуникальным.
Приложение 6
Вопросы для тестирования

1. Выберите верные утверждения:


A. Хранимые процедуры всегда по умолчанию выполняются с правами
владельца.
B. Хранимые процедуры, определенные как AUTHID CURRENT_USER,
выполняются с правами владельца.
C. Исходный код триггера, как и любого PL/SQL-модуля, виден в
представлении словаря данных.
D. Присутствие FOR EACH ROW определяет, что триггер является
триггером предложения (операторным триггером).
E. Для триггера может быть назначено несколько активизирующих действий
(через операцию OR) и таблиц, на которые он направлен.
F. В теле триггера не допускаются предложения DDL. Нельзя также
управлять транзакциями в контексте триггера ( ROLLBACK, COMMIT и SAVEPOINT)

2. Уровень строгости обязательны для функций, вызываемых в SQL-операторах. Найти


соответствие уровня строгости  его описанию.
1.WNDS
2. RNDS
3. WNPS
4. RNPS
A. Функция не модифицирует никакие таблицы базы данных (при помощи операторов DML)
B.Функция не читает пакетированные переменные (пакетированные переменные не
располагаются с правой стороны операции присваивания и не указываются в процедурных или
SQL-выражениях)
C. Функция не модифицирует пакетированные переменные (пакетированные переменные не
указываются с левой стороны операции присваивания или в операторе FETCH).
D. Функция не читает никакие таблицы базы данных (при помощи оператора SELECT).

3. Определите, глядя на код, что вернет затем Sql-запрос?


CREATE OR REPLACE PROCEDURE Autonomous
AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO temp_table VALUES (-10, 'Hello from Autonomous!');
COMMIT;
END Autonomous;

BEGIN
INSERT INTO temp_table VALUES (-10, 'Hello from the parent! ');
Autonomous;
ROLLBACK;
END;
SOL> SELECT * FROM temp_table WHERE num_col = -10;
Выберите один ответ:
a. -10, 'Hello from the parent!
b. -10 Hello from Autonomous!
4. Блок PL/SQL состоит из трех частей. Выберите необязательную (-ые):
1. секция объявлений
2. исполняемый блок
3. блок обработки исключений

5. Укажите вариант ответа из скобок так, чтобы утверждение было верным: Выдача оператора
commit (не влияет / влияет) на то, когда Oracle копирует измененные данные из буферного
кэша на диск.

6. Указатель на контекстную область, где хранятся результаты исполнения SQL- оператора-


это...
7. Может ли быть использован механизм триггеров для проверки корректности ввода,
например, строка, содержащая e-mail, должна обязательно содержать символ ‘@’?
8. Что означает понятие время активации триггера?
9. Что означает понятие триггируемое событие?
10. При помощи какой синтаксической конструкции задается однократное выполнение
триггера?
11.При помощи какой синтаксической конструкции можно обратиться к удаляемым строкам?
12. При помощи какой синтаксической конструкции можно обратиться к добавляемым
строкам?
Приложение 7

Контрольная работа 2. Тестовый вариант

Триггер:
при удалении читателя, на руках у которого имеются книги, уменьшать количество
экземпляров этих книг.
Функция/Процедура:
Вывести в указанном диапазоне даты количество должников (задержавших книгу).

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