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. Ці знання знадобляться тобі на практиці при створенні складніших функцій! Наступного разу розглянемо цикли та їх використання.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ