CodeGym /Kurslar /SQL SELF /PL/pgSQL-in digər prosedur proqramlaşdırma dilləri ilə mü...

PL/pgSQL-in digər prosedur proqramlaşdırma dilləri ilə müqayisəsi (PL/SQL, T-SQL)

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

Database dünyasında bir neçə dil var ki, onlar adi SQL-in imkanlarını genişləndirir və sənə biznes məntiqini birbaşa DBMS-in içində yazmağa imkan verir. Hər biri öz platformasına uyğunlaşdırılıb, amma ümumilikdə eyni işi görürlər — məlumatlarla işi avtomatlaşdırmaq, sadələşdirmək və sürətləndirmək. Bu dillər arasında — PostgreSQL üçün PL/pgSQL, Oracle üçün PL/SQL və SQL Server üçün T-SQL var. Hər birinin öz özəllikləri, üstünlükləri və nüansları var, indi onlar barədə danışacağıq.

PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) — PostgreSQL-ə inteqrasiya olunmuş prosedur proqramlaşdırma dilidir. Əsas məqsədi SQL-in funksionallığını genişləndirməkdir, yəni developer-lara dəyişənlərlə, dövrlərlə, idarəetmə konstruksiyaları və error handling bloku ilə işləmək imkanı verir. Bu dili DB tərəfində kompleks biznes məntiqini reallaşdırmaq üçün güclü alət edir.

PL/SQL (Procedural Language/SQL) — Oracle DBMS-ə daxil olan prosedur proqramlaşdırma dilidir. O, məlumatların işlənməsi və prosedurlar, funksiyalar, paketlər yaratmaq üçün oxşar imkanlar verir. PL/SQL çox yetkin dil sayılır, çünki illərlə təkmilləşdirilib və zəngin alət ekosisteminə malikdir.

T-SQL (Transact-SQL) — Microsoft tərəfindən SQL Server üçün yaradılmış dildir. Bu, standart SQL-in genişləndirilməsidir, dəyişənlər, idarəetmə konstruksiyaları və digər prosedur proqramlaşdırma elementləri dəstəklənir. T-SQL-in transaction-lar, cursor-larla iş və JSON işləmə sahəsində öz özəllikləri var.

PL/pgSQL, PL/SQL və T-SQL arasında oxşarlıqlar

İlk baxışdan, bu üç dil çox bənzər görünür. Bu təəccüblü deyil, çünki onların məqsədi eynidir — developer-a biznes məntiqini database-in içində reallaşdırmağa kömək etmək. Gəlin əsas oxşarlıqlara baxaq:

  1. Blok sintaksisi

    Bütün bu dillər prosedur kodunu strukturlaşdırılmış şəkildə yazmağa imkan verir. Əsas elementlər:

    • Dəyişənlərin elan olunması.
    • Əsas icra bloku (BEGIN ... END).
    • Exception handling dəstəyi.
  2. Dəyişənlər

    Bu dillərin hər birində dəyişənləri elan edib istifadə edə bilərsən. PL/pgSQL-də dəyişən elanına nümunə:

    DECLARE
        student_id INT;
    BEGIN
        student_id := 10;
    END;
    

    Eyni şeyi PL/SQL və T-SQL-də də etmək olar.

  3. İdarəetmə konstruksiyaları

    Bütün dillər IF...THEN, CASE, LOOP, FOR, WHILE dəstəkləyir, bu da kompleks alqoritmlər yazmağa imkan verir.

  4. Funksiyalar və prosedurlar

    İstifadəçi funksiyaları və prosedurları yaratmaq və çağırmaq imkanı var, onlar həm tək dəyər, həm də cədvəl qaytara bilər.

PL/pgSQL, PL/SQL və T-SQL arasındakı fərqlər

Developer-lər tez-tez bir DBMS-dən digərinə keçməli olurlar. Belə hallarda dillərin nüanslarını bilmək vacibdir. Gəlin əsas fərqlərə baxaq.

Dəyişənlərin elan olunması

PL/pgSQL: dəyişənlər DECLARE blokunda elan olunur. Qiymət vermək üçün := istifadə olunur.

DECLARE
    total_students INT;
BEGIN
    total_students := 5;
END;

PL/SQL: elan PL/pgSQL-ə bənzəyir, amma dəyişənin tipi cədvəlin sütunundan %TYPE ilə miras alına bilər.

DECLARE
    student_name students.name%TYPE;
BEGIN
    student_name := 'John';
END;

T-SQL: dəyişənlər DECLARE açar sözü ilə elan olunur, qiymət vermək üçün SET və ya SELECT istifadə olunur.

DECLARE @total_students INT;
SET @total_students = 5;  -- ya da
SELECT @total_students = COUNT(*) FROM students;

Error handling

PL/pgSQL: error handling üçün EXCEPTION bloku istifadə olunur. Məsələn:

BEGIN
    SELECT * INTO my_var FROM nonexistent_table;
EXCEPTION
    WHEN others THEN
        RAISE NOTICE 'Xəta baş verdi!';
END;

PL/SQL: həmçinin EXCEPTION istifadə edir, amma error-ların daha detallı təsnifatı var.

BEGIN
    SELECT * INTO my_var FROM nonexistent_table;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('Heç bir məlumat tapılmadı!');
END;

T-SQL: TRY...CATCH konstruksiyasından istifadə edir.

BEGIN TRY
    SELECT 1/0; -- Sıfıra bölmə xətası
END TRY
BEGIN CATCH
    PRINT 'Xəta baş verdi!';
END CATCH;

Cursor-larla iş

PL/pgSQL: cursor-lar qeyri-aşkar olur və dövrlərdə istifadə oluna bilər.

FOR row IN SELECT * FROM students LOOP
    RAISE NOTICE 'Tələbə: %', row.name;
END LOOP;

PL/SQL: cursor-lar açıq şəkildə elan olunur. Məsələn:

DECLARE
    CURSOR student_cursor IS SELECT * FROM students;
    student_row students%ROWTYPE;
BEGIN
    OPEN student_cursor;
    FETCH student_cursor INTO student_row;
    CLOSE student_cursor;
END;

T-SQL: cursor-lar CURSOR açar sözü ilə elan olunur.

DECLARE student_cursor CURSOR FOR SELECT name FROM students;
OPEN student_cursor;
FETCH NEXT FROM student_cursor;
CLOSE student_cursor;
DEALLOCATE student_cursor;

Transaction-larla iş

PL/pgSQL: transaction-lar BEGIN, COMMIT, ROLLBACK komandaları ilə idarə olunur.

PL/SQL: transaction-lar eyni qaydada COMMIT, ROLLBACK ilə idarə olunur, SAVEPOINT dəstəyi var.

T-SQL: transaction-un başlanğıcını göstərmək üçün BEGIN TRANSACTION əlavə olunur.

JSON dəstəyi

PL/pgSQL: JSONJSONB data type-ları ilə güclü JSON işləmə imkanı var. Nümunə:

SELECT data->>'açar' FROM json_table;

PL/SQL: JSON dəstəyi sonradan əlavə olunub və bir az daha az çevikdir.

T-SQL: JSON_QUERY, JSON_VALUE funksiyaları ilə JSON-larla işləmək çox rahatdır.

PL/pgSQL, PL/SQL və ya T-SQL-i nə vaxt istifadə etməli?

PL/pgSQL:

  • Əgər database-in PostgreSQL-dirsə, seçim aydındır.
  • Böyük həcmli məlumatların işlənməsi üçün əladır, çünki güclü data type-ları (JSONB, massivlər) dəstəkləyir.
  • Açıq ekosistem, çeviklik.

PL/SQL:

  • Oracle məhsulları üçün seçimdir.
  • Məlumatlarla işləmək üçün zəngin ekosistem (paketlər, daxili prosedurlar).

T-SQL:

  • Microsoft SQL Server-də istifadə olunur.
  • Microsoft tətbiqləri və Microsoft Azure stack-ı ilə inteqrasiya üçün idealdır.

Eyni tapşırığın PL/pgSQL, PL/SQL və T-SQL-də nümunəsi

Tapşırıq: tələbələrin sayını hesabla və nəticəni qaytar

PL/pgSQL:

CREATE FUNCTION count_students() RETURNS INT AS $$
DECLARE
    total INT;
BEGIN
    SELECT COUNT(*) INTO total FROM students;
    RETURN total;
END;
$$ LANGUAGE plpgsql;

PL/SQL:

CREATE OR REPLACE FUNCTION count_students RETURN NUMBER IS
    total NUMBER;
BEGIN
    SELECT COUNT(*) INTO total FROM students;
    RETURN total;
END;

T-SQL:

CREATE FUNCTION count_students()
RETURNS INT
AS
BEGIN
    DECLARE @total INT;
    SELECT @total = COUNT(*) FROM students;
    RETURN @total;
END;

İndi sən PL/pgSQL, PL/SQL və T-SQL arasındakı əsas fərqləri bilirsən. Hər dilin öz özəllikləri və istifadə ssenariləri var, bu da onları unikal edir. Dilin (və database-in) seçimi həmişə sənin ehtiyaclarından və layihənin spesifikasiyasından asılıdır.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION