Модульні уроки (1/4)
UDF і базовий SQL
Досі ми надсилали запити із сервера Node.js. Але якщо формула використовується в десятках різних запитів (наприклад, обчислення кінцевої ціни з ПДВ), навіщо дублювати математику в JavaScript? Функції SQL (функції, визначені користувачем — UDF) дозволяють створювати «макроси» в самій БД.
Ось як створити математичний макрос SQL:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;Після виконання цієї команди функція назавжди залишиться в нашій базі даних. Його можна викликати з будь-якого запиту:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;Динамічне створення
Ми можемо визначити скільки завгодно змінних, вказавши їхні типи, і LANGUAGE sql виконає запит і неявно поверне останній оператор, розміщений між знаками долара $$.
Спробуйте самі
Створіть просту функцію виклику під назвою "get_full_name", яка приймає два параметри TEXT ('first_name' TEXT, 'last_name' TEXT).\nВона має повертати значення TEXT.\nУсередині виконайте тривіальний SELECT, який об’єднує два аргументи з одним пробілом між ними, і оголосите це як мову sql.
Показати підказку
ФУНКЦІЯ CREATE OR REPLACE get_full_name(first_name TEXT, last_name TEXT) ПОВЕРТАЄ ТЕКСТ ЯК $$ SELECT first_name || ' ' || прізвище; $$ LANGUAGE sql;
Рішення доступне після 3 спроб
У більш просунуті UDF ми можемо вбудовувати цілі запити. Створіть функцію 'get_customer_count()', яка не приймає параметрів і ПОВЕРТАЄ ЦІЛЕ ЧИСЛО.\nУсередині запустіть тривіальний 'SELECT COUNT(id) FROM customers'.\nОголосіть це як чисту мову sql.
Показати підказку
Слідкуйте: COUNT повертає bigint, переведіть його до INTEGER, щоб відповідати типу повернення! СТВОРИТИ АБО ЗАМІНИТИ ФУНКЦІЮ get_customer_count() ПОВЕРТАЄ ЦІЛЕ ЧИСЛО ЯК $$ SELECT CAST(COUNT(id) ЯК ЦІЛЕ ЧИСЛО) FROM клієнтів; $$ LANGUAGE sql;
Рішення доступне після 3 спроб