Salt la conținutul principal
Modulul 12 · Lecția 2 din 446/57 în curs~15 min
Lecții din modul (2/4)

Logica avansata cu PL/pgSQL

Funcțiile scrise în LANGUAGE sql pot rula doar interogări standard una după alta. Dacă aveam nevoie de ceva mai avansat, cum ar fi „DACĂ totalul introdus este mai mare de 100, APLICĂ O REDUCERE”, SQL simplu nu poate face asta de unul singur. Trebuie să folosim PL/pgSQL, un limbaj de programare procedural cu drepturi depline încorporat în Postgres.

În PL/pgSQL adăugăm corpurile clasice formate din BEGIN .. END, variabile și instrucțiuni condiționale.

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

Această putere ne permite să descarcăm blocuri masive de logică repetitivă pe care altfel le-am scrie în JS, împachetându-le în funcții sigure, rapide, executate aproape de date, cu o latență foarte scăzută!

Încercați-l singur

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

Dorim o funcție complexă care să se înlocuiască pe ea însăși dacă există deja ('get_price_label'), acceptă 'price' ca NUMERIC și returnează un TEXT verbos.\nUtilizați PL/pgSQL. Deschideți BEGIN.\nScrieți logica: dacă prețul este > 100,00 returnați șirul „Premium”. ELSE returnează „Economico”.\nÎnchide condiționalul END; si corpul.

Se încarcă editorul...
Afișează indiciu

CREATE SAU ÎNLOCUITĂ FUNCȚIA get_price_label(price NUMERIC) RETURNEAZĂ TEXTUL CA $$ ÎNCEPE DACĂ preț > 100,00 APOI RETURNEAZĂ „Premium”; ELSE RETURN 'Economico'; END IF; SFÂRŞIT; $$ LIMBA plpgsql;

Soluție disponibilă după 3 încercări

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

Puteți declara variabile temporare înainte de BEGIN cu cuvântul cheie DECLARE.\nScrieți o funcție „saluta_utente(userid INTEGER)” -> Returnează TEXT, logica PL/pgSQL.\nÎn interiorul acesteia DECLARE o variabilă șir „nome_utente TEXT;”.\nApoi, în interiorul BEGIN, completați acea variabilă cu primul nume de interogare folosind clauza „custom_name first” folosind dinamica clauză „primul_nume” INTO nome_utente FROM... WHERE id = userid'. În cele din urmă, RETURN concatenează variabila la „Ciao”.

Se încarcă editorul...
Afișează indiciu

DECLARE nume_utente TEXT; \nÎNCEPEȚI SELECTAȚI prenumele INTO nome_utente... \nRETURNĂ „Ciao” ​​|| nume_utente;

Soluție disponibilă după 3 încercări