Salt la conținutul principal
Modulul 12 · Lecția 1 din 445/57 în curs~15 min
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ă:

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

SQL
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

Exercițiu#sql.m12.l1.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#sql.m12.l1.e2
Încercări: 0Se încarcă…

Î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.

Se încarcă editorul...
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