JavaRush /Курсы /SQL SELF /Введение в управляющие конструкции: IF, CASE, RETURN

Введение в управляющие конструкции: IF, CASE, RETURN

SQL SELF
51 уровень , 0 лекция
Открыта

Управляющие конструкции — это основа любой программы, будь то SQL-скрипт, Python-код или даже робот на Марсе, который думает, запустить ли сигнал домой или поискать жизнь за углом кратера.

В PL/pgSQL управляющие конструкции помогают нам:

  • Выполнять определённые действия, если условия верны.
  • Контролировать порядок выполнения кода.
  • Реализовывать логику принятия решений.

Вы можете представить их как дорожные знаки на дороге: "Если видишь STOP, остановись. Если видишь зелёный свет — двигайся!"

Наиболее популярные управляющие конструкции в PL/pgSQL:

  • IF – проверяет условие и выполняет соответствующие команды.
  • CASE – альтернатива IF, когда условий много.
  • RETURN – завершает выполнение функции и возвращает результат.

Вы уже имеете о них представление. Ну, и после языков программирования разобраться с ними будет очень просто.

Условный оператор IF

Оператор IF используется для выполнения кода только в случае, если определённое условие TRUE (истинно). Вот его базовая структура:

IF условие THEN
  -- Код, который выполняется, если условие истинно.
ELSE
  -- Альтернативный код, если условие ложно.
END IF;

Напишем функцию, которая принимает число и возвращает, чётное оно или нечётное:

CREATE OR REPLACE FUNCTION check_even_odd(num INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF num % 2 = 0 THEN
    RETURN 'Число чётное';
  ELSE
    RETURN 'Число нечётное';
  END IF;
END;
$$ LANGUAGE plpgsql;

Теперь протестируем её:

SELECT check_even_odd(4); -- Число чётное
SELECT check_even_odd(7); -- Число нечётное

Краткое пояснение: IF num % 2 = 0 THEN проверяет, делится ли число на 2 без остатка.

Условие ELSIF

Иногда одной проверки недостаточно, и вам нужно проверять несколько условий. Для этого существует ELSIF.

Предположим, у нас есть функция, которая возвращает текстовое сообщение о температуре:

CREATE OR REPLACE FUNCTION temperature_comment(temp INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF temp < 0 THEN
    RETURN 'Очень холодно!';
  ELSIF temp >= 0 AND temp <= 20 THEN
    RETURN 'Прохладно';
  ELSE
    RETURN 'Тепло!';
  END IF;
END;
$$ LANGUAGE plpgsql;

Тестируем:

SELECT temperature_comment(-5);  -- Очень холодно!
SELECT temperature_comment(15);  -- Прохладно
SELECT temperature_comment(25);  -- Тепло!

Синтаксис CASE

Если у вас большое количество условий, оператор CASE становится спасителем. Он немного похож на IF, но более "элегантен".

CASE
  WHEN условие_1 THEN значение_1
  WHEN условие_2 THEN значение_2
  ELSE значение_по_умолчанию
END;

Создадим функцию, которая возвращает текстовую оценку на основе числа:

CREATE OR REPLACE FUNCTION grade_comment(score INTEGER)
RETURNS TEXT AS $$
BEGIN
  RETURN CASE
    WHEN score >= 90 THEN 'Отлично'
    WHEN score >= 75 THEN 'Хорошо'
    WHEN score >= 50 THEN 'Удовлетворительно'
    ELSE 'Неудовлетворительно'
  END;
END;
$$ LANGUAGE plpgsql;

Тестируем:

SELECT grade_comment(95); -- Отлично
SELECT grade_comment(80); -- Хорошо
SELECT grade_comment(45); -- Неудовлетворительно

Заметка: в отличие от IF, CASE возвращает значение, поэтому оператор RETURN можно использовать прямо внутри CASE.

Оператор RETURN

RETURN завершает выполнение функции и возвращает значение. Это критически важно для функций в PL/pgSQL, которые обязаны что-то возвращать (например, текст, число и т.д.).

Посмотрим, как работает RETURN на простейшем примере:

CREATE OR REPLACE FUNCTION return_example()
RETURNS TEXT AS $$
BEGIN
  RETURN 'Hello, World!';
END;
$$ LANGUAGE plpgsql;

Результат:

SELECT return_example(); -- Hello, World!

Но что, если у нас несколько веток кода? Например, проверка входных данных. Тогда RETURN будет использоваться в разных местах функции:

CREATE OR REPLACE FUNCTION check_positive_negative(num INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF num > 0 THEN
    RETURN 'Положительное число';
  ELSIF num = 0 THEN
    RETURN 'Ноль';
  ELSE
    RETURN 'Отрицательное число';
  END IF;
END;
$$ LANGUAGE plpgsql;

Тестируем:

SELECT check_positive_negative(10); -- Положительное число
SELECT check_positive_negative(0);  -- Ноль
SELECT check_positive_negative(-5); -- Отрицательное число

Типичные ошибки и где можно запутаться

  1. Пропуск оператора END: забудьте END CASE; или END IF;, и PostgreSQL вам сразу же напомнит о необходимости завершить блок кода.
  2. Логические ошибки при использовании ELSIF: порядок условий важен! Более общее условие (temp > 0) не должно идти раньше более специфического (temp > 20).
  3. Забыли про RETURN: в PL/pgSQL функция обязана что-то возвращать, если вы объявили RETURNS.

На этом всё. Мы рассмотрели основы управляющих конструкций и логики в PL/pgSQL. Эти знания пригодятся вам на практике при создании более сложных функций! В следующий раз мы рассмотрим циклы и их использование.

2
Задача
SQL SELF, 51 уровень, 0 лекция
Недоступна
Анализ температуры с условиями `IF` и `RETURN`
Анализ температуры с условиями `IF` и `RETURN`
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ