Лабораторная работа №8

ЛАБОРАТОРНАЯ РАБОТА № 8
Использованием операторов управления потоком данных

Цель работы:
cформировать знания и умения по работе с операторами управления потока данных в СУБД MySQL;
развить логическое и математическое мышление;
воспитать в студентах целеустремленность при решении поставленной задачи, бережное отношение к средствам обучения.

МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОСНАЩЕНИЕ

Персональный компьютер.
Программное обеспечение: MySQL Server, MySQL Administrator, MySQL Query Browser

ЛИТЕРАТУРА
Рудикова Л.В., Проектирование баз данных: учебное пособие, Минск: ИВЦ Минфина, 2009
Труханович Т.Л., Базы данных в сетях телекоммуникаций : лабораторный практикум для учащихся специальности 1-45 01 03 – Сети телекоммуникаций / сост. Т. Л. Труханович. – Мн. : ВГКС, 2012

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

Изучите теоретический материал.
Запишите в тетрадь основные команды и их назначение.
Выполните практическую часть лабораторной работы.
Запишите ответы на контрольные вопросы.
Оформите отчет по лабораторной работе.

КОНТРОЛЬНЫЕ ВОПРОСЫ

Какие операторы используются для управления потоком данных?
Оператор IF. Формат записи. Блок схема. Принцип работы. Примеры.
Оператор Case. Формат записи. Принцип работы. Примеры.
Оператор WHILE. Формат записи. Блок схема. Принцип работы. Примеры.
Оператор REPEATE. Формат записи. Блок схема. Принцип работы. Примеры.
Оператор LOOP. Формат записи. Принцип работы. Примеры.
Операторы LEAVE,ITERATE,GOTO. Принцип работы. Примеры.
Примеры решения задач по использованию операторов управления потоком данных.
Курсоры.Назначение. Команды для их описания и использования.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Конструкции управления потоком данных. В СУБД MySQL реализованы конструкции IF, CASE, LOOP, WHILE, ITERATE и LEAVE полностью. Каждая из этих конструкций может включать как единственный оператор, так и блок операторов при использовании составного оператора BEGIN.. .END. Конструкции можно представлять в форме вложений. Циклы FOR на данный момент не поддерживаются.
Оператор IF
IF условие_поиска THEN оператор (ы)
[ELSEIF условие_поиска THEN оператор(ы)]
[ELSE оператор(ы) ]
END IF
Если значение условие_поиска является истинным, будет выполнен соответствующий SQL-оператор. Если совпадения с условие_поиска не найдены, выполняться будет оператор, указанный в конструкции ELSE.
Оператор CASE
CASE значение_саsе
WHEN значение_when THEN оператор
[WHEN значение_when THEN оператор ...]
[ELSE оператор] END CASE
Или:
CASE
WHEN условие_поиска THEN оператор
[WHEN условие_поиска THEN оператор ...]
[ELSE оператор] END CASE
CASE реализует сложную конструкцию условия. Если значение условие__поиска является истинным, будет выполнен соответствующий SQL-оператор. Если совпадения с условие_поиска не найдены, выполняться будет оператор из конструкции ELSE.
Оператор LOOP
[метка__начала:] LOOP
оператор(ы) END LOOP [метка_конца]
LOOP реализует простую конструкцию цикла, допуская повторное выполнение какого-то конкретного оператора или группы операторов. Операторы в цикле повторяются до выхода из этого цикла, для чего обычно используется оператор LEAVE.
Значения метка__начала и метка_конца, если заданы оба, должны быть одинаковыми.
Оператор LEAVE
LEAVE метка
Данный оператор используется для выхода из конструкции управления потоком выполнения.
Оператор ITERATE
ITERATE метка
ITERATE может использоваться только с операторами LOOP, REPEAT и WHILE и означает "повторить цикл снова".
Оператор REPEAT
[метка_начала:] REPEAT
оператор (ы) UNTIL условие_поиска END REPEAT [метка_конца]
Команды, указанные внутри оператора REPEAT, повторяются до тех пор, пока будет истинным условие условие_поиска. Значения метка_начала и метка__конца, если заданы оба, должны быть одинаковыми.
Оператор WHILE
[метка_начала: ] WHILE условие_поиска DO
оператор (ы) END WHILE [метка_конца]
Команды, указанные внутри оператора WHILE, повторяются до тех пор, пока будет истинным условие условие_поиска. Значения метка_начала и метка_конца, если заданы оба, должны быть одинаковыми.
Пример. Написать процедуру добавления задания сотруднику.
Create PROCEDURE setTask (project text, taskNumber INT, fio text);
/* параметры: название проекта, номер задания, фамилия сотрудника. Возвращает 0, если задание успешно назначено, либо номер сотрудника, которому задание уже назначено*/
BEGIN
Declare idProject INT; /*идентификатор проекта*/
declare idWorker INT default 0; /*идентификатор работника*/
/* проверяем назначено ли это задание*/
SELECT id_employee into idWorker, projects.id_project into idProject FROM projects JOIN tasks on ( projects.id_project=tasks.id_project) where project=idProject and id_ta
·sk = taskNumber;
IF (idWorker=0) /* если задание не назначено, то назначаем его*/
THEN BEGIN
INSERT INTO tasks VALUES (id_project, id_empl, date_delivery);
SELECT "Задание успешно назначено"; END;
ELSE
SELECT concat("Данное задание выполняет сотрудник с номером", idWorker);
END IF;
END;
Курсоры.
Если результирующий запрос возвращает несколько записей, то использование такого запроса совместно с оператором SELECT INTO FROM приводит к возникновению ошибки. Избежать возникновения ошибки можно, прибегнув к использованию курсоров, которые позволяют в цикле просмотреть каждую строку результирующей таблицы запросов. Работа с курсором происходит по следующему алгоритму:
1 При помощи инструкции DECLARE CURSOR связывается имя курсора с выполненным запросом.
DECLARE cursor_name CURSOR FOR select_statment;
Оператор объявляет курсор с именем cursor_name для SELECT-запроса select_statment. В рамках хранимой процедуры имя cursor_name должно быть уникальным. В момент объявления курсора при помощи DECLARE CURSOR SELECT-запрос select_statment не выполняется.
2 Оператор OPEN выполняет запрос, связанный с курсором, и устанавливает курсор перед первой запись результирующей таблицы. Синтаксис:
OPEN cursor_name
3 Оператор FETCH помещает курсор на первую запись результирующей таблицы и извлекает данные из записи в локальные переменные хранимой процедуры. Повторный вызов оператора FETCH приводит к перемещению курсора к следующей записи и так до тех пор, пока записи в результирующей таблице не будут исчерпаны.
FETCH cursor_name INTO var, var1,
После ключевого слова INTO должно быть приведено столько локальных переменных, сколько полей возвращает SELECT-запрос select_statment.
4 Оператор CLOSE прекращает доступ к результирующей таблице и ликвидирует связь между результирующей таблицей и курсором. Синтаксис:
CLOSE cursor_name
Пример. Создать хранимую процедуру, которая изменяет записи таблицы «catalogs» таким образом, чтобы имена каталога становились написанными с большой буквы.
CREATE PROCEDURE `curcatalogs`()
BEGIN
DECLARE id_c INT; DECLARE cat TINYTEXT;
DECLARE is_end INT DEFAULT 0;#флаг окончания работы
/*объявляем курсор для запроса, который выбирает из таблицы идентификатор записи и название каталога, написанное с большой буквы*/
DECLARE curcat CURSOR FOR SELECT id_catalog, concat(ucase(substring(name,1,1)),substring(name,2) FROM catalogs;
/*объявляем обработчик для ситуации, когда курсор достигает конца результирующей таблицы*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_end=1;
OPEN curcat;
/*в цикле читаем данные курсора и редактируем записи*/
wet: LOOP
FETCH curcat into id_c, cat;
IF is_end THEN LEAVE wet;
END IF;
UPDATE catalogs SET name=cat WHERE id_catalog=id_c;
END LOOP wet;
CLOSE curcat;
END

ПРАКТИЧЕСКАЯ ЧАСТЬ (урок 1)
Изучить теоретические сведения по по оператору выбора и условному оператору..
Открыть с помощью MySQL QueryBrowser базу данных, созданную в предыдущей лабораторной работе.
Создайте хранимую процедуру, которая по введенному номеру отдела выводит телефон или сообщение, что такого отдела нет. Решите задачу двумя способами: с использованием оператора IF, с использованием оператора CASE. Запишите в тетрадь команды, выполненных процедур.
Придумайте самостоятельно по одному заданию для создания хранимой процедуры для каждого из операторов. Проверьте их работоспособность. Запишите созданные команды себе в тетрадь.

ПРАКТИЧЕСКАЯ ЧАСТЬ (урок 2 )
Изучить теоретические сведения по операторам циклов.
Создайте хранимую процедуру, которая добавляет всем работникам к зарплате 15% в связи с инфляцией. Решите задачу тремя способами - с использованием операторов циклов:WHILE, REPEAT, LOOP. Запишите в тетрадь команды, выполненных процедур.
Придумайте самостоятельно по одному заданию для создания хранимой процедуры для каждого из операторов. Проверьте их работоспособность. Запишите условие заданий и созданные команды себе в тетрадь.

ПРАКТИЧЕСКАЯ ЧАСТЬ (урок 3 )
Изучить теоретические сведения по созданию и использованию курсоров.
Создайте хранимую процедуру, которая будет выводить фамилии сотрудников, их зарплату и номер отдела в зависимости от введенной зарплаты(выводятся сведения сотрудников имеющих зарплату выше указанной суммы). Запишите в тетрадь команды, выполненных процедур.
Придумайте самостоятельно задание для создания хранимой процедуры с использованием курсоров. Проверьте её работоспособность. Запишите условие задания и созданные команды себе в тетрадь.


Приложенные файлы

  • doc 10809737
    Размер файла: 74 kB Загрузок: 0

Добавить комментарий