CodeGym /Kurslar /SQL SELF /PL/pgSQL ilə tanışlıq

PL/pgSQL ilə tanışlıq

SQL SELF
Səviyyə , Dərs
Mövcuddur

PostgreSQL təkcə SQL ilə "danışa" bilmir! Tanış ol: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), PostgreSQL-ə daxili olan prosedur proqramlaşdırma dili. O, SQL-sorgular və idarəetmə strukturlarından istifadə etməklə (məsələn, IF, CASE şərtləri və LOOP, FOR, WHILE dövrləri kimi) mürəkkəb əməliyyatların icrasını asanlaşdırmaq üçün yaradılıb.

PL/pgSQL və SQL — bunlar avtomatlaşdırılmış yığım xətti və adi "əl" aləti, məsələn, çəkic kimidir. Çəkic kimi, SQL — etibarlı alətdir. Sadəcə hər zərbə üçün əlinlə vurmalısan. Amma PL/pgSQL — artıq avtomatik yığım xəttidir: sən bir dəfə deyirsən nə və necə olmalıdır, sonra hər şey özü işləyir — komandaları icra edir, yadda saxlayır, yoxlayır, nəsə səhv getsə belə, sakitcə davam edir. Niyə hər mıxı özün vurmalısan ki, əgər sadəcə baxıb hər şeyin özü getdiyini görə bilərsən? Bu, əsl arzu deyilmi?

PL/pgSQL ilə adi SQL-sorguların müqayisəsi

Gəlin baxaq, PL/pgSQL adi SQL-sorgulardan nə ilə fərqlənir.

SQL bir konkret tapşırığı yerinə yetirmək lazım olanda əladır: məsələn, cədvəldən bütün tələbələri seçmək və ya yeni sətr əlavə etmək. Amma işə "əgər bu olarsa, onda onu et" məntiqi və ya eyni əməliyyatı təkrar-təkrar etmək ehtiyacı çıxanda, SQL bir az çətinlik çəkir.

Məsələn, təsəvvür et ki, sənə lazımdır:

  1. Cədvəldə tələbə haqqında artıq qeyd olub-olmadığını yoxlamaq.
  2. Əgər qeyd varsa — məlumatları yeniləmək.
  3. Əgər qeyd yoxdursa — yeni qeyd əlavə etmək.

Adi SQL ilə sən bir neçə sorgu yazmalı və nəticəni client tərəfində emal etməli olardın. PL/pgSQL ilə isə bütün bunları bir prosedura yığmaq olar və o, birbaşa verilənlər bazasında işləyəcək.

PL/pgSQL daha kompleks layihələrdə özünü əla göstərir. O, imkan verir ki:

  • ara nəticələri dəyişənlərdə saxlayasan;
  • səhvləri emal edəsən ki, verilənlər bazası "çöküb" getməsin;
  • çətin alqoritmləri icra etmək üçün dövrlər və şərtlərdən istifadə edəsən.

PL/pgSQL-in istifadə sahələri

PL/pgSQL-in tətbiqi çox vaxt aşağıdakı hallarda rast gəlinir:

  1. Tapşırıqların avtomatlaşdırılması. Məsələn, hər dəfə məlumat yenilənəndə avtomatik olaraq jurnal (log) qeydinin yaradılması.

  2. Biznes-məntiq. Səndə belə bir qayda var: hər tələbə, hansı ki, 5-dən çox buraxılışı var, avtomatik olaraq "aktiv deyil" kimi işarələnməlidir. Niyə bu qaydanı PL/pgSQL funksiyasına qoymayasan?

  3. Analitika və hesabatlar. Məlumatları verilənlər bazası ilə client tətbiqi arasında daşımaq əvəzinə, onları server tərəfində toplamaq olar.

  4. Trigger-lər. PL/pgSQL, məlumat əlavə, yeniləmə və ya silinəndə avtomatik əməliyyatlar yerinə yetirən trigger-lərin yazılması üçün istifadə olunur.

PL/pgSQL istifadə nümunəsi

Budur, iki ədədi qəbul edib toplayan və nəticəni qaytaran funksiya nümunəsi:

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

İzah:

  • CREATE FUNCTION add_numbers(a INT, b INT) — biz add_numbers adlı funksiya yaradırıq, o, iki INT (tam ədəd) tipli arqument qəbul edir.
  • RETURNS INT — funksiya tam ədəd qaytardığını göstərir.
  • BEGIN ... END — əsas əmrlər bloku, burada funksiyanın məntiqi icra olunur.
  • RETURN a + b; — toplamanın nəticəsi geri qaytarılır.

Bu funksiyanı çağırmaq üçün adi SQL-sorgudan istifadə etmək lazımdır:

SELECT add_numbers(10, 20);

Nəticə: 30.

Gizli tələlər və məhdudiyyətlər

PL/pgSQL — güclü alətdir, amma onunla ehtiyatlı olmaq lazımdır:

  • Performans: çox mürəkkəb funksiyalar bazanın işini ləngidə bilər. Həmişə test et və optimallaşdır.
  • Testləşdirmə: funksiyalarda səhvlər gizli qala bilər, ta ki, onları çağırana qədər. Testləri unutma!
  • Oxunaqlılıq: böyük funksiyalar və prosedurlar, çətin məntiq ilə, başa düşmək üçün çətin ola bilər. Elə kod yaz ki, bir ay sonra da özün başa düşəsən.

Artıq bir az bilirsən ki, PL/pgSQL nədir, indi onun sintaksisi və əsas imkanları barədə danışacağıq. Növbəti mühazirələrdə kod blokları yaratmağı, dəyişənləri elan etməyi və verilənlər tipiləri ilə işləməyi öyrənəcəyik. Verilənlər bazası tərəfində proqramlaşdırmaya doğru irəli!

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Sadə toplama funksiyasının yaradılması
Sadə toplama funksiyasının yaradılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION