Vai al contenuto
eLearner.app
Modulo 12 · Lezione 1 di 445/57 nel corso~15 min
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:

SQL
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:

SQL
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

Esercizio#sql.m12.l1.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
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

Esercizio#sql.m12.l1.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
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