[МУЗЫКА]
[МУЗЫКА] [МУЗЫКА] Следующий
объект базы данных, который мы рассмотрим, называется хранимой процедурой.
Когда нам могут понадобиться хранимые процедуры?
Иногда для реализации бизнес-логики нам требуется выполнить вместе несколько
действий, касающихся базы данных.
Нам может потребоваться выборка данных из нескольких таблиц и изменение
строк нескольких таблиц для реализации какой-то функции бизнес-логики.
В этом нам могут помочь хранимые представления.
Хранимая процедура — это объект базы данных,
которая хранится как объект базы данных.
Хранимая процедура состоит из последовательности операторов
SQL и может использовать в себе некоторое процедурное расширение этого языка,
которое специфично для каждой отдельной СУБД.
Хранимая процедура, как и другие объекты базы данных, создается при помощи CREATE и
удаляется при помощи команды DROP и может быть изменена при помощи команды ALTER.
Что нам понадобится для написания хранимых процедур?
Как и в любом языке программирования, нам понадобятся переменные.
Как определяются переменные в MySQL?
Мы используем оператор DECLARE, после чего пишем имя переменой,
тип переменной и можем задать значение по умолчанию.
Основное отличие от языков программирования состоит в том,
что мы не можем привычно перечислить несколько переменных, а потом сказать,
что они все будут какого-то определенного типа.
В данном случае мы должны для каждой переменной отдельно присвоить ей тип.
На экране вы видите определение двух переменных, одна будет целочисленная,
вторая — строковая.
Нам понадобится оператор присваивания.
Для того чтобы присвоить переменной какое-то значение,
мы будем использовать оператор SET.
Мы пишем SET, имя переменной, равно и дальше присваиваем ей какое-то значение.
Также для реализации логики нам потребуется условный оператор.
Нам нужно проверить выполнение каких-то условий внутри нашего программного блока.
Для этого мы используем оператор IF, после этого пишется условие,
которое будет проверяться, и дальше мы пишем набор действий,
которые выполняются в случае выполнения этого условия.
После слова ELSE указывается действие, которое надо выполнить,
когда условие не выполнено.
Если нам нужно объединить несколько действий в блок,
то мы можем делать это при помощи команд BEGIN и END.
Также мы можем использовать оператор выбора,
пример которого вы видите на экране.
Оно записывается при помощи ключевого слова CASE.
После слова CASE мы указываем имя переменной,
дальше после слова WHEN указываем условие, после чего делаем определенные действия.
И эти действия должны быть атомарны, то есть действие,
выполняемое в случае CASE, должно быть единственным.
Также при создании процедур мы можем использовать циклы.
Циклы бывают с предусловием и с постусловием.
Для реализации функций бизнес-логики нам может потребоваться
оператор цикла, который выполняется с предусловием.
Для этого у нас есть оператор WHILE.
Пример вы видите на экране.
Наш цикл будет выполняться, пока наша переменная меньше 10.
Операторы LEAVE и ITERATE могу потребоваться
для выхода из цикла или для повтора действий цикла, не доходя до конца.
Все команды языка SQL разделяются определенным разделителем.
По умолчанию разделителем является точка с запятой.
Для того чтобы объединить несколько действий в отдельный программный блок,
который называется процедурой, мы должны вначале переопределить разделитель.
В данном случае мы определяем разделителем два знака доллара, идущих подряд.
На экране вы видите пример создания процедуры.
Мы создаем таблицу, которую будем использовать в процедуре,
переопределяем разделитель и создаем процедуру, которая называется insert3.
Пример команды вы можете посмотреть на экране.
Как вызвать процедуру?
Процедура вызывается при помощи оператора call.
Мы пишем слово call, пробел, имя процедуры.
Если у процедуры есть параметры,
то они указываются после имени процедуры в круглых скобках.
Если у процедуры параметров нет, то круглые скобки не ставятся.
Рассмотрим параметры, которые могут быть у нашей процедуры.
Всего процедура может иметь три типа параметров.
Это входные параметры, выходные параметры и параметры,
которые совмещают в себе свойства обоих типов.
Входные параметры используются по умолчанию.
Они нужны тогда, когда мы ходим передать в процедуру какие-то значения.
Эти параметры не могут изменяться внутри процедуры и
не видны снаружи после окончания действия нашей процедуры.
Выходные параметры, напротив, могут быть использованы после завершения работы
процедуры для передачи в эти параметры каких-то значений.
Параметры типа IN и INOUT совмещают в себе оба этих типа,
то есть мы можем и передать в процедуру какое-то значение,
и проверить значение этого параметра после выполнения процедуры.
Рассмотрим пример процедуры, когда мы добавляем в таблицу курсов новый курс.
Наша процедура создания нового курса имеет единственный входной параметр,
который будет задавать название курса.
Внутри процедуры мы делаем несколько действий.
Во-первых, мы создаем идентификатор курса, определяя
максимальный существующий в нашей таблице идентификатор и добавляя к этом единичку.
Кроме этого мы проверяем, что курса с таким названием еще нет.
Если условие проверки пройдено, то мы добавляем новый курс в нашу таблицу,
используя внешний параметр с названием «Курсы» и
сгенерированное нами поле «Идентификатор курса».
После этого вызываем процедуру и можем убедиться в том,
что курс был добавлен, проверив строки таблицы «Курс».
Мы заметили, что процедуры могут внутри себя считывать
значения разных таблиц и изменять значения таблиц.
В следующем блоке мы рассмотрим с вами функции.