Перейти до основного вмісту
Модуль 12 · Урок 2 із 446/57 у курсі~15 min
Модульні уроки (2/4)

Розширена логіка з PL/pgSQL

Функції, написані мовою LANGUAGE sql, можуть виконувати лише стандартні запити один за одним. Якщо нам потрібно щось більш просунуте, наприклад «ЯКЩО введена сума перевищує 100, то застосувати знижку», звичайний SQL не може зробити це сам по собі. Нам потрібно використовувати PL/pgSQL, повноцінну процедурну мову програмування, вбудовану в Postgres.

У PL/pgSQL ми додаємо класичні тіла, що складаються з BEGIN .. END, змінних і умовних операторів.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

Ця потужність дозволяє нам розвантажувати величезні блоки повторюваної логіки, яку б ми інакше писали в JS, упаковуючи їх у безпечні, швидкі функції, що виконуються поблизу даних із дуже низькою затримкою!

Спробуйте самі

вправи#sql.m12.l2.e1
Спроби: 0Завантаження…

Нам потрібна складна функція, яка замінює себе, якщо вона вже існує ('get_price_label'), приймає 'price' як NUMERIC і повертає докладний ТЕКСТ.\nВикористовуйте PL/pgSQL. Відкрийте BEGIN.\nНапишіть логіку: якщо ціна > 100,00, поверніть рядок "Premium". ELSE повертає 'Economico'.\nЗакрити умовний END; і тіло.

Завантаження редактора…
Показати підказку

CREATE OR REPLACE FUNCTION get_price_label(price NUMERIC) ПОВЕРТАЄ ТЕКСТ ЯК $$ BEGIN IF price > 100.00 THEN RETURN 'Premium'; ELSE RETURN 'Economico'; END IF; КІНЕЦЬ; $$ LANGUAGE plpgsql;

Рішення доступне після 3 спроб

вправи#sql.m12.l2.e2
Спроби: 0Завантаження…

Ви можете оголосити тимчасові змінні перед BEGIN за допомогою ключового слова DECLARE.\nНапишіть функцію 'saluta_utente(userid INTEGER)' -> Повертає ТЕКСТ, логіку PL/pgSQL.\nУсередині неї ОГОЛОШИТЕ рядкову змінну 'nome_utente TEXT;'.\nПотім усередині BEGIN динамічно заповніть цю змінну first_name. запит "клієнти" за допомогою спеціального пункту "SELECT first_name INTO nome_utente FROM... WHERE id = userid". Нарешті, RETURN об’єднує змінну в «Ciao».

Завантаження редактора…
Показати підказку

ОГОЛОШЕННЯ nome_utente ТЕКСТ; \nПОЧАТОК ВИБРАТИ first_name INTO nome_utente... \nПОВЕРНУТИ 'Ciao' || nome_utente;

Рішення доступне після 3 спроб