Passer au contenu principal
eLearner.app
Module 12 · Leçon 1 sur 445/57 dans le cours~15 min
Leçons du module (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

Exercice#sql.m12.l1.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

CREATE OR REPLACE FUNCTION get_full_name(first_name TEXT, last_name TEXT) RETURNS TEXT AS $$ SELECT first_name || ' ' || last_name; $$ LANGUAGE sql;

Solution disponible après 3 tentatives

Exercice#sql.m12.l1.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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;

Solution disponible après 3 tentatives