Przejdź do głównej treści
eLearner.app
Moduł 12 · Lekcja 1 z 445/57 w kursie~15 min
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:

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:

SQL
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

Ćwiczenie#sql.m12.l1.e1
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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

Ćwiczenie#sql.m12.l1.e2
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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