PL/pgSQL
PL/pgSQL ( Procedural Language/ PostGres Structured Query Language ) este o extensie procedurală a limbajului SQL utilizat în DBMS PostgreSQL . Acest limbaj este destinat scrierii de funcții, declanșatoare și reguli și are următoarele caracteristici:
- adaugă constructe de control la standardul SQL;
- permite calcule complexe;
- poate folosi toate obiectele bazei de date definite de utilizator;
- ușor de folosit.
Beneficiile utilizării
SQL standard este folosit în PostgreSQL și alte baze de date relaționale ca limbaj principal pentru crearea de interogări. Este portabil și ușor de învățat și de utilizat. Cu toate acestea, punctul său slab este că fiecare construct de limbă este executat separat de server . Aceasta înseamnă că aplicația client trebuie să trimită fiecare cerere către server, să primească rezultatul acesteia, să o proceseze într-un anumit mod conform logicii aplicației, să trimită următoarea cerere etc. Dacă clientul și serverul bazei de date sunt localizate pe mașini diferite, acest lucru poate duce la creșterea nedorită a întârzierilor și a cantității de date trimise de la client la server și invers.
Când utilizați PL/pgSQL, lucrurile devin mai ușoare. Devine posibilă gruparea cererilor și blocurilor de calcul într-o singură structură care va fi găzduită și executată pe server , iar clientul va trimite o solicitare pentru executarea acesteia și va primi rezultatul, ocolind toate transferurile intermediare de date înainte și înapoi, care în majoritatea cazurilor. cazurile are un efect foarte pozitiv asupra performanței.
Există și funcționalitatea blocurilor anonime, care vă permite să scrieți interogări nu în SQL, ci direct în orice limbaj procedural de server existent, inclusiv pl/pgSQL, fără a crea funcții stocate pe serverul DBMS.
Tipuri de argument și returnare acceptate
Funcțiile scrise în PL/pgSQL pot lua drept argumente și returnează valori de orice tip scalar sau compus acceptat de serverul bazei de date, inclusiv definite de utilizator, tipuri de șir și înregistrări.
Argumentele și valorile returnate ale , și pseudotipurilor anyelementsunt , de asemenea, permise . Acest lucru face posibilă definirea funcțiilor polimorfe al căror tip acceptat și returnat se poate schimba de la apel la apel. Funcțiile din PL/pgSQL pot returna nu o singură valoare, ci un întreg set de valori sau nu pot returna nicio valoare (folosind tipul ).
anyarrayanynonarrayanyenumvoid
Structura codului PL/pgSQL
Orice construcție de program (funcție, declanșator sau regulă) scrisă în PL/pgSQL are un aspect bloc și arată astfel:
[ << etichetă >> ]
[ DECLARE
declarații variabile ]
BEGIN
corpul programului
END [ label ];
/*
Comentariu pe mai multe linii */
-- Comentariu pe o singură linie
După cum este obișnuit, parantezele pătrate indică fragmente care sunt opționale și este posibil să nu fie prezente într-o anumită versiune.
Fiecare declarație individuală și fiecare construcție din corpul programului trebuie să se încheie cu punct și virgulă. Un bloc din interiorul altui bloc trebuie să aibă și un punct și virgulă după terminarea END, dar blocul cel mai exterior ENDnu are nevoie de punct și virgulă.
Orice construct din corpul programului poate fi, de asemenea, separat într-un bloc separat, cu propria sa secțiune de declarare a variabilelor.
Sintaxa limbii
Format declarație variabilă
Orice variabilă din PL/pgSQL trebuie declarată înainte de a fi utilizată, declarația implicită nu este suportată; singura excepție este bucla FOR - în ea variabila buclă implicită este declarată ca INTEGER. Este posibil să atribuiți imediat o valoare unei variabile sau să o declarați ca constantă:
nume [ CONSTANT ] tip [ NOT NULL ] [ { DEFAULT | : = } valoare ]; ( Toate parantezele sunt necesare )
Cuvântul cheie DEFAULTeste folosit pentru a seta o valoare implicită, cuvântul cheie CONSTANTprotejează variabila de modificări ulterioare definindu-o ca constantă.
Trecerea de argumente
În mod implicit, parametrii trecuți sunt notați ca $1și $2așa mai departe. Cu toate acestea, dacă se dorește creșterea lizibilității codului, atunci acești parametri pot fi indicați cu aliasuri. Există două moduri.
Puteți seta numele parametrului direct în definiția funcției:
CREATE FUNCTION tax_vânzări ( subtotal real ) RETURNE real AS $$
BEGIN
RETURN RETURN subtotal * 0,06 ;
SFÂRȘIT ;
$$ LIMBA plpgsql ;
În caz contrar, puteți declara un alias pentru parametru direct în secțiunea de declarare a variabilelor:
CREATE FUNCTION sales_tax ( real ) RETURNS real AS $$
DECLARE
subtotal ALIAS FOR $ 1 ; Subtotal BEGIN RETURN * 0,06 ; SFÂRȘIT ; $$ LIMBA plpgsql ;
Vezi și
Link -uri
- PL/pgSQL - Limbaj procedural SQL
- Serghei Suprunov. PostgreSQL: Funcții și declanșatoare // Administrator de sistem . - 2004. - Nr. 10 (23) .