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:
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.
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.
İdarəetmə konstruksiyaları
Bütün dillər
IF...THEN,CASE,LOOP,FOR,WHILEdəstəkləyir, bu da kompleks alqoritmlər yazmağa imkan verir.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: JSON və JSONB 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.
GO TO FULL VERSION