Оператор IF
С помощью оператора IF в MySQL можно выполнять сравнение двух элементов в выражении. В качестве операндов в MySQL могут выступать функции, операторы, переменные, литералы и их комбинации. Результатом выполнения IF может быть одно из 3 значений: FALSE, TRUE или NULL.
Синтаксис оператора IF:
Если в первой строке кода выражение if_expression примет значение TRUE, команды commands будут выполнены. Если же выражение примет значение FALSE, то после проверки MySQL существования блока ELSEIF проверяется значение выражения elseif_expression. Если оно примет значение TRUE, то выполняется блок commands2.
При наличии в операторе нескольких веток ELSEIF они проверяются последовательно (сверху вниз), пока одно из них не даст TRUE. Если все выражения FALSE, то выполнится блок commands3.
Пример выполнения оператора IF
Пусть необходимо создать процедуру GetCustomerLevel, в которой по указанному номеру покупателя будет определяться тип его карты согласно уровню допустимого кредита. При допустимом кредите более 50 000 уровень покупателя – Платиновый, при кредите более 10 000 – Золотой, если менее 10 000 – серебряный.
Оператор CASE
В MySQL используется две формы оператора CASE: простая и поисковая.
Простая форма оператора CASE
Синтаксис оператора CASE:
MySQL считывается case_выражение, далее последовательно сравнивается результат с when_выражениями. При получении совпадения выполняется соответствующий блок команд. Если значение case_выражения не совпадает ни с одним из when_выражений будет выполнен блок команд ELSE.
Обратим внимание, что использовать ELSE не обязательно, но при ситуации, когда ELSE будет отсутствовать, а выражение не будет найдено, MySQL покажет ошибку.
Пример использования оператора CASE
Аргументом хранимой процедуры GetCustomerShipping является номер клиента, а выходной строкой – период доставки товара, который основан на стране клиента. В середине хранимой процедуры объявляется переменная, в которую будет записываться страна клиента. Далее выполняется запрос на получение страны клиента, который запишется в эту переменную, и выполнится простой оператор CASE для сравнения страны. Пусть доставка по США проведется за 1 день, по Канаде – за 3 дня, а по всему миру – за 5 дней.
Рассмотрим код скрипта, который теоретически может использовать хранимую процедуру, и проверим правильность ее написания.
Поисковой оператор CASE
С помощью простого оператора CASE можно сопоставить выражения с уже указанным набором значений. Для выполнения сложных сравнений (например, диапазоны значений) используют поисковой оператор CASE, который эквивалентен оператору IF, но удобнее читается.
MySQL сравнивается каждое условие WHEN, пока не найдется совпадение TRUE, после выполняется блок команд, который следует после слова THEN.
Как и в случае простого оператора, если блок ELSE найден не будет и не будет ни одного соответствия, MySQL выдаст ошибку.
В MySQL нельзя использовать пустые команды в ELSE или THEN. Для использования пустой логики можно убрать ее в блок ELSE и вставить пустой блок BEGIN END.
Рассмотрим работу поискового оператора CASE для вышеприведенного примера выдачи кредитной карты покупателя:
В данной хранимой процедуре была использована логика:
- При сумме кредитной линии более 50 000 карта клиента – пластиковая;
- При сумме менее 50 000, но более 10 000 – золотая;
- При сумме менее 10 000 – серебряная.
Проверим хранимую процедуру с помощью выполнения фрагмента кода: