РАБОТА 24.О
«Создание хранимых функций»
Формируемые/проверяемые умения
| Формируемые/проверяемые знания
| Создавать объекты баз данных в современных СУБД
Обеспечивать информационную безопасность на уровне базы данных
| Способы контроля доступа к данным и управления привилегиями
| Время выполнения задания – 90 минут.
Уровень сложности работы – 3
Необходимое оборудование, материалы, документация: ПК, МУ по выполнению практических работ.
КРИТЕРИИ ОЦЕНИВАНИЯ РАБОТЫ КРИТЕРИИ ВЫСТАВЛЕНИЯ ОЦЕНКИ
Наименование показателей
| Количество баллов
| Создана простая хранимая функция
| 2
| Создана хранимая функция с использованием условного оператора
| 4
| Создана хранимая функция с использованием оператора цикла
| 4
| Максимальное количество баллов
|
| Баллы
| Оценка
| 10-8
| отлично
| 7
| Хорошо
| 6
| Удовлетворительно
|
СОДЕРЖАНИЕ РАБОТЫ
Создание хранимых функций.
24.Т ТИПОВОЕ ЗАДАНИЕ
Создать простую хранимую функцию Создать хранимую функцию с использованием оператора IF Создать хранимую функцию с использованием оператора цикла
ХОД ВЫПОЛНЕНИЯ ТИПОВОГО ЗАДАНИЯ 24.Т
Создать простую функцию
Простая функция, выводящая приветствие
DELELIMITER//
CREATE FUNCTIONhello(s CHAR(20))RETURNS CHAR(50)
BEGIN
RETURNCONCAT('Hello, ',s,'!');
END//
DELIMITER;
Вызовфункции
SELECThello(‘Александр');
Результат работы функции
Hello, Александр!
Создать функцию, которая будет подсчитывать разницу между средним возрастом студентов и текущим возрастом студента (для каждого студента) и округлять значение.
Таблица student
name
| age_diff()
| Евгений
| 25
| Анатолий
| 27
| Андрей
| 20
|
DELIMITER $$
CREATE FUNCTION age_diff(a TINYINT) RETURNS FLOAT NOT DETERMINISTIC
BEGIN
DECLARE avg_age FLOAT DEFAULT 0;
SELECT AVG(age) INTO avg_age FROM student;
RETURN (ROUND(ABS(a - avg_age)));
END $$
DELIMITER ;
Теперьиспользуемэтуфункциювзапросе:
SELECT name, age_diff(age) FROM student;
Результат работы функции
name
| age_diff()
| Евгений
| 2
| Анатолий
| 3
| Андрей
| 4
|
Создать хранимую функцию с использованием условного оператора
Таблица student
name
| age_diff()
| Евгений
| 25
| Анатолий
| 27
| Андрей
| 20
| DROP FUNCTION IF EXISTS func;
DELIMITER // CREATE FUNCTIONfunc(pid INT) RETURNS VARCHAR(20) BEGIN DECLARE ppid INT DEFAULT 4; IF(ppid > pid) THEN
4 > 7 RETURN 'Good_Argument'; else RETURN 'Bad_Argument'; END IF; END// DELIMITER ;
Вызов функции SELECTfunc(7);
Результат работы функции
Bad_Argument
Создать хранимую функцию с использованием оператора цикла
3.1
DELIMITER //
CREATE FUNCTIONFunctCalc (starting_valueINT )
RETURNS INT
BEGIN
DECLAREincome INT;
SET income = 0;
label1: WHILEincome<= 8000 DO
SETincome = income + starting_value;
END WHILE label1;
RETURNincome;
END//
DELIMITER ;
Ссылаемся на новую функцию следующим образом:
SELECTFunctCalc(1000);
Результат работы функции
8000
3.2 Создадим функцию, которая выводит номер филиала, в котором заказчик имеет наибольшее число заказов.
DELIMITER//
CREATE FUNCTIONmaxOrders(clientID int)
RETURNS int
BEGIN
DECLARE pointID, currentPoint, maxPoint int;
DECLARE currentOrders, maxOrders int;
SET currentPoint = 1;
SET maxOrders = 0;
SELECT max(ID_point) INTO maxPoint FROM point;
WHILE currentPoint <= maxPoint
DO
SELECT count(*)INTO currentOrders
FROM order, client
WHERE order.ID_client = client.ID_client
AND order.ID_client = clientID
AND ID_point = currentPoint;
IF (currentOrders > maxOrders)
THEN
SET maxOrders = currentOrders;
SET pointID = currentPoint;
END IF;
SET currentPoint = currentPoint + 1;
END WHILE;
RETURNpointID;
END//
DELIMITER;
Примервызовафункции
Установим входной параметр.
SET @pointID=2;
Вызовемфункцию.
SELECTmaxOrders(@pointID);
А теперь вызовем функцию без установки параметров.
SELECTmaxOrders(2);
SELECTmaxOrders(5); ЗАДАНИЕ 24.О
Написать хранимые функции в соответствии со своим вариантом.
Вариант
| Описание задания
|
| Вывести фамилию, имя, отчество и телефон агента в одной строке. Фамилию ввести как параметр. Вывести среднюю зарплату работников, если она больше зарплаты, вводимой как параметр, иначе вывести 30000. Создать функцию, которая выводит номер филиала, в котором заказчикомбыло заключено наименьшее число договоров.Номер заказчика ввлдится как параметр.
|
| Вывести фамилию, инициалы и телефон клиента в одну строку. Фамилию ввести как параметр. Вывести количество человек, которые были заселены в номере. Если количество человек больше 20, то вывести 25, иначе вывести 19. Создать функцию, которая выводит номер, в котором клиент заселялсянаименьшее число раз.Код клиента вводится как параметр.
|
| Вывести фамилию и инициалы клиента Смирнова Станислава Романовича. Фамилия и Имя водятся как параметр. Вывести наибольшую сумму, на которую были сданы товары, если она не превышает значения вводимого как параметр, иначе вывести значение, полученное от суммы вводимого параметра и числа 2000. Создать функцию, которая выводит название товара, которое меньшее количество раз сдавалось клиенту. Код клиента вводится как параметр. Название товара вводится какпараметр.
|
| Вывести название компании, вдрес и телефон в одной строке. Название компании ввести как параметр. Вывести фразу «Мало», если общее количество товаров менее вводимой в параметре функции, иначе вывести «Много». Создадать функцию, которая выводит код товара, который покупался покупателем наибольшее число раз. Код покупателя вводится как параметр.
|
| Вывести фамилию и инициалы заказчика одной строкой, у которого телефон вводится как параметр. Вывести количество купленного товара заказчиком, если это количество не менее вводимого в параметре функции или если оно равно 50. Создадать функцию, которая выводит код товара, который покупался покупателемнаименьшее число раз. Код покупателя вводится как параметр.
|
| Вывести название, вид деятельности, адрес, телефон работодателя, название которого вводится как параметр. Подсчитать общее количество заявок работодателей. Если работодатели подали болше 5 заявок, то вывести это количество, если меньше, то вывести 0. Создадать функцию, которая выводит код работодателя, который заключал договорс соискателем наибольшее число раз. Код соискателя вводится как параметр.
|
| Вывести в одну строку фамилию, телефон и адрес клиента, название которого вводится как параметр. Подсчитать среднюю сумму услуги. Если она отличается от значения, вводимого как параметр на 1000, то вывести среднюю сумму, иначе вывести значение параметра.
Создадать функцию, которая выводит код услуги, которая пользуется наибольшим спросом у клиента при оформлении сделки. Код клиента вводится как параметр.
|
| Вывести название и артикул детали в одну строку, если название детали вводится как параметр. Если максимальная цена в покупках менее значения, вводимого как параметр, то вывести значение максимальной цены, иначе вывести 0.
Создадать функцию, которая выводит код группы, в которой будетработать преподаватель наименьшее количество раз. Код преподавателя вводится как параметр.
|
| Вывести фамилию, инициалы и телефон преподавателя в одну строку, фамилия и отчество которого вводятся как параметры. Найти среднее количество часов занятий. Если оно меньше значения, вводимого как параметр, то вывести полученное среднее количество часов, иначче вывести минимаоьное количество плюс 100. Создадать функцию, которая выводит код преподавателя, который преподает наибольшее количество дисциплин. Код преподавателя вводится как параметр.
|
| Вывести фамилию, имя, отчество и телефон студента Смирнова Виталия в одну строку. Фамилия и отчество являются параметрами функции. Найти среднюю оценку, полученную студентами за все экзамены. Если она больше 3, 5, то вывести «успешное обучение», иначе вывести «неуспешное обучение». Создадать функцию, которая выводит код код группы, с который преподаватель проводит самре большое количество факультативов. Код преподавателя вводится как параметр.
|
| Вывести фамилию, инициалы и должность преподавателя Березкина Ивана Васильевича. Фамилия и отчество являются параметрами функциию. Найти среднее количество часов по дисциплинам в группе 3802. Если оно превышает 180 часов, то вывести «Сократить часы». Если часы не более 150, то вывести «Увеличить часы». Ограничить подсчет восьмью записями. Создадать функцию, которая выводит код вида занятия, котороепроводит преподаватель наибольшее число раз. Код преподавателя вводится как параметр.
|
| Создать функцию, в которой вывести фамилию и инициалы преподавателя Егорова Николая Денисовича, и его ученую степень в одну строку. Фамилия и отчество преподавателя вводятся как параметры функции. Создать функцию нахождения средней зарплаты. Если она не превышает 40000 руб., то вывести «зарплата ниже средней по городу», иначе «зарплата выше средней по городу». Создадать функцию, которая выводит код вида дополнительной работы, которуювыполнял сотрудник наименьшее число раз. Код сотрудника вводится как параметр.
|
| Создать функцию вывода названия и телефона промышленного предприятия. Название предприятия вводится как параметр функции. Создать фукцию определения «возрастного» состояния станков. Если «возраст» станка менее 3 лет, то вывести «новый станок», если «возраст» станка не более 10 лет, то вывести «Небльшой срок эксплуатации», если «возраст» станка более 10 лет, то «Большой срок эксплуатации». В качестве параметра вводится код станка. Создадать функцию, которая выводит код вида ремонта, который применялся к станкунаименьшее число раз. Код станка ремонта вводится как параметр.
|
| Создать функцию для вывода фамилии, иницаалов и телефона турфирмы.
Название турфирмы вводится как параметр.
Создать функцию для определения дешевых или дорогих путевок. Если стоимость путевки дороже 40000 руб., то вывести «Дорогая путевка», иначе вывести «Дешевая путевка». Создадать функцию, которая выводит код отеля, в который клиент приезжал по путевкам наименьшее количество раз. Код клиента вводится как параметр.
|
| Создать функцию для вывода фамилии, инициалов водителя. Фамилия и имя водителя вводятся как параметры функции.
Создать функцию определения дальности всех маршрутов водителя, по которым он ездил. Если средний маршрут водителя меньше 50 км, то «близкий маршрут», иначе «дальний маршрут». Код водителя вводится как параметр.
Создадать функцию, которая выводит код маршрута, по которому водитель проезжал наибольшее количество раз. Код водителя вводится как параметр.
|
| Создать функцию вывода названия юридического лица, его ИНН и расчетный счет. Название юридического лица вводится как параметр.
Создать функцию определения средней стоимости переговоров, проведенныых клиентом. Если средняя стоимость менее 20 мин., то вывести «Короткий разговор», если более 20 мин., то вывести «Длительный разговор».
Создадать функцию, которая выводит код города, в который абонент звонил наибольшее количество раз. Код абонента вводится как параметр.
|
| Создать фукцию для вывода фамилии и инициалов сотрудника в одну строку. Фамилия и отчество вводятся как параметр.
Создать функцию для определения расходов, сделанных сотрудником. Если расходы менее 10000 руб., то вывести «Маленькие расходы», иначе вывести «Большие расходы». Код сотрудника ввести в качестве параметра.
Создадать функцию, которая выводит код расхода, который сотрудник использовал наибольшее количество раз. Код сотрудника вводится как параметр.
|
| Создать функцию для вывода названия книги и ее жанра в одну строку. Название книги вводится как параметр функции. Создать функцию для вывода стоимости проката. Если стоимость проката 100 руб., то вывести «Маленькая стоимость проката», если стоимость проката от 101 до 200 руб, то вывксти «Средняя стоимость прокат», если стоимость более 200 руб, то вывести «Большая стоимость проката». Код книги вводится как параметр. Создадать функцию, которая выводит код книги, которую читатель брал наибольшее количество раз. Код читателя вводится как параметр.
|
| Создать функцию для вывода фамилии, инициалов, адреса и телефона клиента. Фамилия и имя клиента вводятся как параметры функции. Создать функцию для определения стоимостипроката автомобиля. Если стоимость проката менее минимальной стоимости проката по всем автомобилям, то вывести «Небольшая стоимость автомобиля», если стоимость автомобиля более средней стоимости всех автомобилей, то вывести «Большая стоимость автомобиля». Код автомобиля вводится как параметр. Создадать функцию, которая выводит код автомобиля, который клиент брал наибольшее количество раз. Код клиентавводится как параметр.
|
| Создать функцию для вывода названия, вида собственности и телефон клиента в одну строчку. Название клиента вводится как параметр функции. Создать функцию для определения степени суммы кредита, взятого клиентом. Если взятый кредит меньше средней суммы всех взятых клиентов, то вывести «Маленький кредит», иначе «большой кредит». Создадать функцию, которая выводит код вида кредита, который брал клиент наибольшее количество раз. Код клиентавводится как параметр.
|
| Создать функцию для вывода названия, адреса и телефона предприятия в одну строку. Название предприятия вводится как параметр. Создать функцию для определения степени доходности предприятия. Если доходность предприятия меньше средней по всем предприятиям, то вывести «Маленькая доходность предприятия», иначе вывести «Большая доходность предприятия». Код предприятия вводится как параметр функции. Создадать функцию, которая выводит код ценной бумаги, которую покупал клиент наименьшее количество раз. Код клиента бумагивводится как параметр.
|
| Создать функцию для вывода ФИО актера и его звания в одну строчкую Фамилия и имя актера вводятся как параметры функции. Создать функцию для определения суммы контракта актера. Если сумма контракта менее средней суммы контрактов всех актеров, то выводится «маленькая сумма контракта», иначе вывести «Большая сумма котракта». Фамилия актера вводится как параметр функции. Создадать функцию, которая выводит код вида кредита, который юридическое лицо брало наибольшее количество раз. Код юр. лицавводитсякак параметр.
|
| Вывести фамилию, имя и отчество пациента в одну строку. Фамилия и имя вводятся как параметры функции. Вывести определение стоимости лечения клиента. Если стоимость лечению более 5000 руб., то вывести «Дорогое лечение», если стоимость лечения ниже минимальной стоимости лечения по всем клиентам, то вывести «Дешевое лечение». Код клиента вводится как параметр. Создадать функцию, которая выводит код врача, к которому клиент обращался наибольшее количество раз. Код клиентавводится как параметр.
|
| Создать функцию для вывода названия и телефона предприятия в одну строчку. Название предприятия вводится как параметр функции. Создать функцию для определения максимального значения показателя предприятия. Если максимальное значение показателя предприятия больше максимального значения по всем предприятиям, то вывести Создадать функцию, которая выводит код врача, к которому клиент обращались наибольшее количество раз. Код клиента как параметр.
|
| Создать функцию для вывода названия организации-заказчика и банковских реквизитов в одну строчку. Название организации водится как параметр функции. Создать функцию для определения рейтинга передачи. Если рейтинг передачи меньше 100, то вывести «Маленький рейтинг», иначе вывести «Большой рейтинг». Создадать функцию, которая выводит код валюты, которая встречается в показателях наибольшее количество раз. Код показателя как параметр.
|
| Создать функцию для вывода фамилии и инициалов частного лица, а также его телефона в одну строку. Фамилия частного лица вводится как параметр функции. Создать функцию для вывода определение стоимости изделия. Если оно болше средней стоимости всех изделий, то вывести «Дорогое изделие», иначе вывести «Дешевое изделие». Создадать функцию, которая выводит код изделия, которое клиент заказывает наибольшее количество раз. Код клиентавводится как параметр.
|
| Создать функцию для вывода названия изделия и единицу измерения в одну строку. Название изделия вводится как праметр функции. Создать функцию для вывода определения цены товара. Если цена товара в пределах от 1000 до 5000, то вывести «Дешевый товар», иначе «Дорогой товар». Создадать функцию, которая выводит код товара, который заказывался клиентом наименьшее количество раз. Код клиента вводится как параметр.
|
| Создать функцию для вывода фамилии и инициалов клиентаю Фамилия и имя вводятся как параметры функции. Создать функцию для определения цены стрижек. Если цена стрижки ниже средней цены по всем сделанным стрижкам, то вывести «Дешевая стрижка», иначе вывести «Дорогая стрижка». Создадать функцию, которая выводит код стрижки, которую делал клиент наименьшее количество раз. Код клиентавводится как товара.
|
| Создать функцию для вывода фамилии и инициалов клиента. Фвмилия и имя вводятся как параметры функции. Создать функцию для определениястоимости услуг. Если стоимость услу выше максимальной стоимости по всем видам услуг, то вывести «Дорогая услуга», иначе выести «Недорогая услуга». Создадать функцию, которая выводит код вида услуги, которую заказывал клиент наибольшее количество раз. Код клиентавводится как параметр.
|
| Создать функцию для вывода названия торговой точки и этажа, на котором она находится. Название торговой точки вводится как параметр функции. Создать функцию для определения величины аренды. Если аренда стоит более средней арендгой платы по всем точкам, то вывести «Дорогая аренда», инвче вывести «Недорогая аренда». Создадать функцию, которая выводит код торговой точки, которую заказывал клиент наибольшее количество раз. Код клиента вводится как параметр.
| |