Lezioni del modulo (1/4)
UDF ed SQL Base
Finora abbiamo inviato le query dal server Node.js. Ma se una formula è usata in decine di query diverse (es: calcolare il prezzo finale con IVA) perché duplicare la matematica nel Javascript? Le Funzioni SQL (User Defined Functions - UDF) ci permettono di creare delle "macro" all'interno del DB.
Ecco come creare una macro SQL matematica:
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;Una volta eseguito questo comando, troveremo per sempre la funzione nel nostro database. Potrà essere chiamata in qualsiasi query:
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;Creazione dinamica
Possiamo definire quante variabili vogliamo specificandone anche il tipo, e la LANGUAGE sql eseguirà la query e farà return implicito dell'ultima istruzione che inseriremo tra i dollari $$.
Prova tu
Crea una semplice funzione richiamabile chiamata 'get_full_name' che accetta due parametri TESTUALI ('first_name' TEXT, 'last_name' TEXT).\nE questa deve ritornare un type TEXT.\nAll'interno fai un banalissimo SELECT che concatena i due argomenti in pasto interponendo uno spazio vuoto, e definiscila di linguaggio sql.
Mostra suggerimento
CREATE OR REPLACE FUNCTION get_full_name(first_name TEXT, last_name TEXT) RETURNS TEXT AS $$ SELECT first_name || ' ' || last_name; $$ LANGUAGE sql;
Soluzione disponibile dopo 3 tentativi
Nelle UDF più avanzate possiamo inserire intere query. Crea una funzione 'get_customer_count()' che non accetta parametri e RITORNA un INTEGER.\nAll'interno esegui una banale 'SELECT COUNT(id) FROM customers'.\nDichiarala linguaggio sql puro.
Mostra suggerimento
Occhio che COUNT ritorna un bigint, fai il cast a INTEGER per combaciare col ritorno! CREATE OR REPLACE FUNCTION get_customer_count() RETURNS INTEGER AS $$ SELECT CAST(COUNT(id) AS INTEGER) FROM customers; $$ LANGUAGE sql;
Soluzione disponibile dopo 3 tentativi