Lecții din modul (1/4)
UDF-uri și SQL de bază
Până acum am trimis interogări de pe serverul Node.js. Dar dacă o formulă este utilizată în zeci de interogări diferite (de exemplu, calcularea prețului final, inclusiv TVA), de ce să duplicați matematica în JavaScript? Funcții SQL (Funcții definite de utilizator - UDF) ne permit să creăm „macro-uri” în interiorul DB în sine.
Iată cum să creați o macrocomandă SQL matematică:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;Odată ce această comandă rulează, funcția rămâne pentru totdeauna în baza noastră de date. Poate fi apelat din orice interogare:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;Creație dinamică
Putem defini câte variabile dorim, specificând tipurile acestora, iar LANGUAGE sql va rula interogarea și va returna implicit ultima declarație plasată între semnele dolar $$.
Încercați-l singur
Creați o funcție simplă apelabilă numită „get_full_name” care acceptă doi parametri TEXT („first_name” TEXT, „last_name” TEXT).\nTrebuie să returneze o valoare TEXT.\nÎn interior, faceți un trivial SELECT care concatenează cele două argumente cu un singur spațiu între ele și declarați-l ca limbaj sql.
Afișează indiciu
CREATE SAU ÎNLOCUITĂ FUNCȚIA get_full_name(prim_nume TEXT, last_nume TEXT) RETURNĂ TEXTUL CA $$ SELECT prenumele || ' ' || nume; $$ LIMBA sql;
Soluție disponibilă după 3 încercări
În UDF-uri mai avansate putem încorpora interogări întregi. Creați o funcție „get_customer_count()” care nu acceptă parametri și returnează un INTEGER.\nÎn interior, rulați un trivial „SELECT COUNT(id) FROM customers”.\nDeclarați-l ca limbaj sql pur.
Afișează indiciu
Atenție: COUNT returnează un bigint, aruncați-l la INTEGER pentru a se potrivi cu tipul de returnare! CREATE SAU ÎNLOCUITĂ FUNCȚIA get_customer_count() RETURNEAZĂ INTEGER CA $$ SELECT CAST(COUNT(id) AS INTEGER) FROM clienți; $$ LIMBA sql;
Soluție disponibilă după 3 încercări