CodeGym /Kurslar /SQL SELF /PL/pgSQL-də verilənlərin tipləri və onların istifadəsi: I...

PL/pgSQL-də verilənlərin tipləri və onların istifadəsi: INTEGER, TEXT, BOOLEAN, RECORD

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

Bu mühazirədə biz PL/pgSQL-də hansı data tiplərinin dəstəkləndiyini və onlarla necə effektiv işləməyi öyrənəcəyik. Əsas diqqət dörd data tipinə yönələcək:

  • INTEGER — rəqəmlərlə işləmək üçün.
  • TEXT — sətirlərlə işləmək üçün.
  • BOOLEAN — məntiqi dəyərlərlə işləmək üçün.
  • RECORD — dinamik data strukturları ilə işləmək üçün.

Hər bir data tipini nümunələrlə izah edəcəyik ki, real istifadəsini görə biləsən.

PL/pgSQL-də dəstəklənən data tipləri

PL/pgSQL-də sənə PostgreSQL-dən tanış olan bütün data tipləri işləyir. Sadə rəqəm tiplərindən (INTEGER, NUMERIC) tutmuş, daha mürəkkəb tiplərə, məsələn massivlər və JSONB-yə qədər. Gəlin əsaslarına baxaq.

  1. Primitiv tiplər:

    • INTEGER, BIGINT, FLOAT, NUMERIC — rəqəm tipləri.
    • TEXT, CHAR, VARCHAR — mətn tipləri.
    • BOOLEAN — məntiqi data tipi.
  2. Mürəkkəb tiplər:

    • RECORD — dinamik data setləri üçün.
    • ROWTYPE — cədvəlin sətrinin tipi ilə işləmək üçün.
    • Massivlər və JSON — bunları kursun sonrakı hissələrində öyrənəcəyik.

INTEGER tipi ilə işləmək

INTEGER — ən çox istifadə olunan data tiplərindən biridir. Tam ədədləri saxlamaq üçündür. PL/pgSQL-də bu tipdən hesablamalar, qeyd identifikatorları və şərtlərin yoxlanması üçün istifadə edə bilərsən.

Nümunə: qeyd sayını hesablamaq

Tutaq ki, bizdə students adlı cədvəl var və neçə tələbə olduğunu bilmək istəyirik.

DO $$
DECLARE
    total_students INTEGER; -- Tələbələrin sayını saxlamaq üçün dəyişən
BEGIN
    SELECT COUNT(*) INTO total_students FROM students; -- Sorğunun nəticəsini dəyişənə yazırıq
    RAISE NOTICE 'Tələbələrin sayı: %', total_students; -- Mesaj çıxarırıq
END;
$$;

INTEGER ilə işləyərkən vacib məqamlar:

  • PL/pgSQL-də dəyişənə dəyər vermək üçün INTO açar sözündən istifadə olunur.
  • Əgər INTEGER tipinə onluq dəyər yazmağa çalışsan, səhv alacaqsan. Belə hallarda NUMERIC və ya FLOAT istifadə et.

TEXT tipi ilə işləmək

TEXT sətir tipli dataları saxlamaq üçündür. Adlar, təsvirlər və ya başqa mətnlərlə işləyəndə lazım olur.

Nümunə: tələbələrin adlarını çıxarmaq

Bu nümunədə biz students cədvəlindən bütün tələbələrin adlarını çıxaracağıq.

DO $$
DECLARE
    student_name TEXT; -- Tələbənin adı üçün dəyişən
BEGIN
    FOR student_name IN SELECT name FROM students LOOP
        RAISE NOTICE 'Tələbənin adı: %', student_name; -- Hər adı çıxarırıq
    END LOOP;
END;
$$;

TEXT ilə işləmək üçün faydalı funksiyalar:

  • UPPER()LOWER() — böyük/kiçik hərfə çevirmək üçün.
  • CONCAT() — sətirləri birləşdirmək üçün.
  • LENGTH() — sətirin uzunluğunu tapmaq üçün.

Məsələn:

DO $$
DECLARE
    full_name TEXT;
BEGIN
    full_name := CONCAT('Aleks', ' Min'); -- Sətirləri birləşdiririk
    RAISE NOTICE 'Tam ad: %', UPPER(full_name); -- Adı böyük hərflə çıxarırıq
END;
$$;

BOOLEAN tipi ilə işləmək

BOOLEAN məntiqi dəyərləri saxlamaq üçündür: TRUE, FALSENULL. Bu tip xüsusilə şərtləri yoxlamaq və datanı filtrləmək üçün faydalıdır.

Nümunə: tələbənin aktivliyini yoxlamaq

Tutaq ki, səndə students cədvəli var və is_active sütunu göstərir ki, tələbə aktivdir ya yox.

DO $$
DECLARE
    is_active BOOLEAN; -- Aktivlik dəyərini saxlamaq üçün dəyişən
BEGIN
    SELECT is_active INTO is_active FROM students WHERE id = 1; -- Dəyəri cədvəldən alırıq
    IF is_active THEN
        RAISE NOTICE 'Tələbə aktivdir!';
    ELSE
        RAISE NOTICE 'Tələbə AKTİV DEYİL.';
    END IF;
END;
$$;

BOOLEAN ilə işləyərkən vacib məqamlar:

  • Məntiqi dəyərləri birbaşa IFWHILE şərtlərində istifadə edə bilərsən.
  • NULL məntiqdə "müəyyən olunmamış" sayılır, ona görə yoxlamalarda bunu nəzərə al.

RECORD tipi ilə işləmək

RECORD — əvvəlcədən strukturu bəlli olmayan data sətrini saxlamaq üçün güclü tipdir. Xüsusilə SQL sorğularının nəticəsində bir neçə sütun gələndə çox faydalıdır.

Nümunə: cədvəldəki bütün qeydləri gəzmək

Aşağıdakı nümunədə biz students cədvəlindəki bütün qeydləri gəzirik və hər tələbənin adını və ID-sini çıxarırıq.

DO $$
DECLARE
    student RECORD; -- Data sətrini saxlamaq üçün dinamik tip
BEGIN
    FOR student IN SELECT id, name FROM students LOOP
        RAISE NOTICE 'ID: %, Ad: %', student.id, student.name; -- Sətrin sütunlarına müraciət edirik
    END LOOP;
END;
$$;

RECORD ilə işləyərkən vacib məqamlar:

  • RECORD tipli dəyişənlər yalnız dövrədə və ya SELECT INTO ilə doldurulur.
  • Sütunlara record.column_name ilə müraciət edə bilərsən.

Cədvəllərlə işləmək üçün ROWTYPE data tipləri

Əgər cədvəldəki bir sətri tam saxlamaq və tipin dəqiq olmasını istəyirsənsə, ROWTYPE istifadə edə bilərsən. Bu tip avtomatik olaraq cədvəlin sətrinin strukturunu götürür.

Nümunə: ROWTYPE ilə işləmək

DO $$
DECLARE
    student students%ROWTYPE; -- students cədvəlinin sətri strukturunda dəyişən
BEGIN
    SELECT * INTO student FROM students WHERE id = 1; -- Sətrin datalarını dəyişənə yükləyirik
    RAISE NOTICE 'Tələbənin adı: %, Kurs: %', student.name, student.course;
END;
$$;

RECORDROWTYPE arasındakı fərqlər

Xüsusiyyət RECORD ROWTYPE
Sütunların strukturu Əvvəlcədən bəlli deyil Cədvəl və ya sorğudan asılıdır
İstifadə İstənilən nəticə üçün çevik Struktur sərt bağlıdır

Praktik nümunə

Gəlin bir funksiya yazaq ki, aktiv tələbələrin sayını və adlarını qaytarsın.

CREATE FUNCTION active_students_report() RETURNS TABLE(id INT, name TEXT) AS $$
BEGIN
    RETURN QUERY
    SELECT id, name FROM students WHERE is_active = TRUE;
END;
$$ LANGUAGE plpgsql;

Funksiyanı çağırmaq:

SELECT * FROM active_students_report();

Data tipləri ilə işləyərkən səhvlər

Bəzən data ilə işləyəndə səhvlər olur. Budur ən çox rast gəlinən hallar:

  • Tip səhvi: məsələn, INTEGER tipli dəyişənə sətir yazmaq (my_var := 'abc';).
  • TRUE və ya FALSE gözlənilən yerdə NULL istifadə etmək.
  • RECORD tipini düzgün başlatmadan istifadə etmək.

Səhvlərdən necə qaçmaq olar:

  • Dəyişənlərin tipini həmişə açıq göstər.
  • Cədvəldəki sütunların data tiplərini yazmazdan əvvəl yoxla.
  • RAISE NOTICE kimi debug komandalarından istifadə et.

Artıq sən INTEGER, TEXT, BOOLEANRECORD data tipləri ilə PL/pgSQL-də necə işləməyi bilirsən. Bu biliklərlə PostgreSQL prosedur proqramlaşdırmasında daha mürəkkəb və güclü proqramlar yaza biləcəksən.

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
PL/pgSQL-ə giriş
PL/pgSQL-ə giriş
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION