Lekcje modułu (1/4)
Funkcje UDF i bazowy SQL
Do tej pory wysyłaliśmy zapytania z serwera Node.js. Jeśli jednak formuła jest używana w dziesiątkach różnych zapytań (np. przy obliczaniu ceny końcowej z VAT), po co powielać obliczenia w JavaScript? Funkcje SQL (Funkcje zdefiniowane przez użytkownika - UDF) pozwalają nam tworzyć „makra” wewnątrz samej bazy danych.
Oto jak utworzyć matematyczne makro SQL:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;Po uruchomieniu tego polecenia funkcja pozostaje na zawsze w naszej bazie danych. Można go wywołać z dowolnego zapytania:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;Dynamiczna kreacja
Możemy zdefiniować dowolną liczbę zmiennych, określając ich typy, a LANGUAGE sql uruchomi zapytanie i niejawnie zwróci ostatnią instrukcję umieszczoną pomiędzy znakami dolara $$.
Spróbuj sam
Utwórz prostą funkcję wywoływalną o nazwie „get_full_name”, która akceptuje dwa parametry TEKSTOWE (TEKST „imię” i TEKST „nazwisko”). Musi zwracać wartość TEKST. W środku wykonaj trywialne polecenie SELECT, które łączy dwa argumenty z pojedynczą spacją między nimi i zadeklaruj je jako język sql.
Pokaż wskazówkę
UTWÓRZ LUB ZAMIEŃ FUNKCJĘ get_full_name(imię TEKST, nazwisko TEKST) ZWRACA TEKST JAKO $$ WYBIERZ imię || ' ' || nazwisko; $$ JĘZYK sql;
Rozwiązanie dostępne po 3 próbach
W bardziej zaawansowanych UDF-ach możemy osadzać całe zapytania. Utwórz funkcję „get_customer_count()”, która nie akceptuje żadnych parametrów i ZWRACA liczbę całkowitą. W środku uruchom prostą funkcję „WYBIERZ COUNT(id) OD klientów”. Zadeklaruj ją jako czysty język SQL.
Pokaż wskazówkę
Uważaj: COUNT zwraca bigintę, rzuć ją na INTEGER, aby dopasować typ zwracany! UTWÓRZ LUB ZAMIEŃ FUNKCJĘ get_customer_count() ZWRACA LICZBĘ CAŁKOWITĄ JAKO $$ WYBIERZ RYSUNEK(COUNT(id) JAKO LICZBĘ CAŁKOWITĄ) OD klientów; $$ JĘZYK sql;
Rozwiązanie dostępne po 3 próbach