DBMS-də məlumat növləri

Məlumat növləri

DBMS-də məlumat növləri - Kompüter dünyasındakı bütün dillər məlumat növlərini dəstəkləyir. Datatipləri cədvəldəki sütunların və ya koddakı dəyişənlərin domenini təyin edir. Onlar sütunun və ya dəyişənin rəqəmlər, əlifbalar, məntiqi dəyərlər və s. ehtiva edib-etmədiyini müəyyən edirlər. Bu, çox vacibdir, çünki o, sütunun sui-istifadəsini idarə edir – əgər hər kəs rəqəmsal sütuna əlifba daxil etməyə çalışırsa, buna icazə vermir. Əgər sütunun məlumat növləri müəyyən edilməmişdirsə, biz istənilən məlumatı istənilən sütunda saxlaya bilərik, beləliklə, qarışıqlıq yaradırıq. Hər hansı bir cədvəl yaxşı müəyyən edilmiş və yaxşı qurulmuş olmalıdır. Datatipləri təmiz verilənlər bazası yaratmağa kömək etməkdir.

Daxili məlumat növlərinin altı növü var

  1. Skaler məlumat növləri: - Rəqəmlər, onluqlar və s. Kimi skaler dəyərləri saxlamaq üçün istifadə olunur.
  2. Kompozit məlumat növləri: - Bu adətən skalar məlumat tiplərinin digər məlumat tiplərinin birləşməsidir.
  3. İstinad məlumat növləri: - Başqa bir məlumat növü haqqında məlumatları saxlamaq üçün istifadə olunur. C-də göstəricilər kimi adlandırıla bilər.
  4. LOB məlumat növləri: - Şəkillər, videolar və s. Kimi böyük obyektlərin saxlanması üçün istifadə olunur
  5. Naməlum Sütun növləri: - sütun növləri bilinmədikdə, bu məlumat növü istifadə olunur.
  6. İstifadəçi məlumat növlərini təyin edir: - yuxarıdakı əsas məlumat tiplərindən istifadə edərək kodlaşdırma zamanı bu məlumat növləri inkişaf etdirici tərəfindən müəyyən edilir. Kodlamalarını asanlaşdırmaq üçün yeni məlumat tiplərini müəyyənləşdirirlər. Bu da birləşmiş məlumat növü kimi qəbul edilə bilər.

Skalar məlumat növləri

Bu məlumat növləri ədədi sütun dəyərlərini və ya ədədi dəyişənləri saxlamaq üçün istifadə olunur. Fərz edək ki, cədvəldə bir yaş sütunu var. Bu sütunda yalnız nömrələr ola bilər. İçərisinə heç bir tarix və əlifba əlavə edə bilmərik. Bu səbəbdən bu sütunu SAYI olaraq elan edirik. Bu, rəqəmdən başqa hər hansı bir dəyər əlavə etməyə çalışarkən istifadəçini məhdudlaşdırır. Bu, bir sütunun domen məhdudluğunu qorumaq üçün mexanizmlərdən biridir.

Dörd növ Skaler tipi var - Xarakter, Rəqəmsal, Tarix / Saat və Mantı.

Karakter məlumat növü: -Bu tip məlumat növü, əlifba kimi alfa-ədədi dəyərləri, həm də rəqəmləri və xüsusi simvolları saxlamaq üçün istifadə olunur. Saxlanılacaq məlumatların saxlama sahəsinə və uzunluğuna görə bu xarakter məlumat növündə müxtəlif alt tiplər mövcuddur.

Cədvəl yaradarkən:

CREATE TABLE STUDENT (STD_NAME CHAR (15), ADDRESS VARCHAR2 (50));

PL / SQL dilində:
DECLARE
		v_name VARCHAR2 (30);
BEGIN ….

Məlumat növü Alt məlumat növü təsvir saxlama
Simvol Məlumat Növü CHAR Simli və ya dəyərin sabit uzunluğunu saxlamaq üçün istifadə olunur. 32767 bytes
XÜSUSİYYƏTLƏR Bu CHAR ilə eynidir və hər ikisi alternativ olaraq istifadə olunur. CHAR ən çox istifadə olunur. 32767 bytes
VARCHAR2 Bu da simlərin saxlandığı CHAR-a bənzəyir. Bu məlumat növü sabit uzunluğu təyin edəcək, lakin simlin həqiqi uzunluğu dəyərin uzunluğu olacaq, yəni; VARCHAR2 (10) NAME sütununda təyin olunduqda və NAME 'James' dəyərinə sahibdirsə, o sütun dəyərinin uzunluğu 5 deyil, 10-dir. CHAR vəziyyətində həmişə 10 olacaq; adlardan sonra boşluq NULLS ilə doldurulacaq. 32767 bytes
VARCHAR2 Alt növləri: Aşağıdakı alt növ eyni uzunluğu müəyyənləşdirir.
Alt məlumat növləri təsvir
STRING bunlar VARCHAR2-yə bənzəyir, yalnız ad fərqi
VARÇAR
NCHAR Müəyyən edilmiş uzunluqda Milli Karakter məlumatlarını (Unicode) saxlayır. 32767 bytes
NARCHAR2 Bu, VARCHAR2-yə bənzəyir, ancaq unicode dəyərlərini saxlamaq üçün istifadə olunur. 32767 bytes
RAW Bu məlumat növü, müxtəlif növ sistemlər arasında məlumat tipinin çevrilməsinin tələb olunmadığı musiqi, video, qrafika və s. Kimi məlumatlar üçün istifadə olunur. Bit və baytlarla təmsil edirlər. 32767 bytes
LONG Arxa uyğunluğu olan dəyişən uzunluqlu sətirləri saxlamaq üçün istifadə olunur. İçərisində çox böyük məlumat saxlaya bilərik. Ancaq LONG -a uzun müddət ehtiyac olduqda istifadə etmək tövsiyə olunur. Çünki LOB -un saxlama və dönüşümlərdə daha az məhdudiyyəti var və yeni bir versiya olduqda daha çox xüsusiyyət əlavə olunur. SELCT və ya UPDATE ifadələrində UZUN sütunlara üstünlük verilir masaları. 32760 bytes
UZUN XAM Bu, UZUN və RAW məlumat növlərinin birləşməsidir. 32760 bytes
ROWID ROWID məlumat növü bir satırın həqiqi saxlama ünvanını təmsil edir. Və məntiqi ROWID kimi cədvəl indeksləri. Geriyə uyğunluğu saxlamaq üçün istifadə edilən bu məlumat növü.
UROWID [(ölçü)] UROWID məlumat növü, ROWID məlumat növü ilə eyni universal ROWID olaraq təyin olunur. Daha yeni tətbiqetmələr inkişaf etdirmək üçün UROWID məlumat növündən istifadə edin. 4000 bytes

 

Ədədi məlumat növləri: - Müxtəlif növ ədədi məlumatları saxlayır - rəqəmlər, onluqlar və s. Növündən asılı olaraq müxtəlif alt tip növlərinə sahibik.

Cədvəl yaradarkən:

CREATE TABLE STUDENT (
STD_ID NUMBER (8), ADDRESS VARCHAR2 (50));

PL / SQL dilində:
DECLARE
		v_total PLS_INTEGER;
BEGIN …

Məlumat növü Alt məlumat növü təsvir saxlama
SAYI VERİ Növləri SAYI (s, s) Rəqəmsal məlumatları saxlamaq üçün istifadə olunan NUMBER məlumat növü. Saxlama Aralığı: Həssaslıq diapazonu (p): 1 ilə 38 arasında və Ölçek aralığı (lar): -84 ilə 127 arasında
SAYI Alt tiplər: Bu alt növ müxtəlif növ yaddaş aralığını təyin edir.
Alt məlumat növləri təsvir Maksimum dəqiqlik
İNTEGER Bu məlumat növləri sabit ondalık nöqtələri saxlamaq üçün istifadə olunur. Tələblərinizə əsasən istifadə edə bilərsiniz. 38 rəqəm
INT 38 rəqəm
KIÇIQ 38 rəqəm
DEC 38 rəqəm
DECIMAL 38 rəqəm
SAYI 38 rəqəm
REAL 63 ikili rəqəm
ÇİFT DƏZİYYƏT 126 ikili rəqəm
SAL 126 ikili rəqəm
BINARY_INTEGER BINARY_INTEGER məlumat növü müsbət və mənfi dəyərləri saxlayır. NUMBER məlumat növü dəyərləri ilə müqayisədə daha az yaddaş sahəsi tələb olunur. Depolama Aralığı: -2147483647-dən 2147483647-ə qədər.
Alt məlumat növləri təsvir  
TƏBİİ Yalnız müsbət dəyərlər saxlanılır.
POSITIVE
Təbii NULL dəyərləri bu məlumat növündə saxlanmır. Yalnız sıfır olmayan müsbət dəyərlərə icazə verilir.
Müsbət
İmzalamaq SIGNTYPE yalnız -1, 0 və 1 dəyərlərinə icazə verir.
PLS_INTEGER PLS_INTEGER məlumat növü imzalanmış tam ədədi saxlamaq üçün istifadə olunur. NUMBER məlumat növü dəyərinin müqayisəsi üçün daha az yaddaş sahəsi tələb olunur. Saxlama Aralığı: -2147483647-dən 2147483647-ə qədər. PLS_INTEGER məlumat növü, məlumatlarda daha yaxşı performans verir. PLS_INTEGER hesab əməliyyatını NUMBER / BINARY_INTEGER məlumat növündən daha sürətli yerinə yetirir.

Tarix / Saat məlumat növləri: - Bu məlumat tipləri tarix və zaman damğalarını sütunlarda və dəyişənlərdə saxlamaq üçün istifadə olunur.

Məlumat növü Alt məlumat növü

təsvir

Silsilə

Tarix / Saat məlumat növü

TARİXİ DATE məlumat növü sabit uzunluqlu etibarlı tarix-saat formatını saxlayır. Eramızdan əvvəl 1 Yanvar 4712 - MS 31 dekabr 9999 tarixindən başlayır. 1 yanvar 4712 - 31 dekabr 9999 AD
TAMESTAMP Etibarlı tarixi il, ay, gün və saat ilə saat, dəqiqə, saniyə ilə saxlayır

növü

TIMESTAMP növü

1

Sintaksis: TIMESTAMP [(kəsirli_seconds_precision)]
fraksiya_seconds_precision istəyə görə ikinci dəqiqliyin kəsr hissəsindəki rəqəmlərin sayını təyin edir. 0 ilə 9 arasındadır. Varsayılan 6-dır.
Misal: TIMESTAMP '2014-04-13 18: 10: 52.124'

2

Sintaksis: ZAMAN ZAMANI İLƏ TIMESTAMP [(kəsirli_seconds_precision)]
Məsələn: TIMESTAMP '2014-04-13 18: 10: 52.124 +05: 30'
Vaxt zonası ilə UTC saat dilimini təyin edin. Aşağıdakı iki dəyər UTC-də eyni anı təmsil edir.
TIMESTAMP '1999-04-15 8:00:00 -8: 00' (8.00 AM Pasifik Standart Saatı) və ya
TIMESTAMP '1999-04-15 11:00:00 -5: 00' (Şərqi Standart Saat 11:00 AM) hər ikisi eynidir.

3

Sintaksis: TIMESTAMP [(fraksiyalı_sekundlar_ dəqiqlik)] YERLİ ZAMAN ZONASI İLƏ
Nümunə: COL_NAME TIMESTAMP (3) YERLİ ZAMAN ZONASI;
YERLİ ZAMAN ZONASI ilə verilənlər bazası sütununa dəyərlər daxil etdiyinizi, dəyərin verilənlər bazasının saat qurşağı ilə birlikdə saxlandığını təyin edir.
Saat qurşağının yerdəyişməsi sütunda saxlanılmır. Oracle verilənlər bazasından dəyər aldığınızda, UTC yerli saat qurşağınıza uyğun olaraq qaytarır.

Mantı Datatipləri: - Boole dəyərlərini saxlamaq üçün istifadə olunur - TRUE və ya FALSE. NULL-i də saxlaya bilər və imzasız boole dəyişən kimi qəbul edilir. İki cədvəlin boolean sütunlarını müqayisə edə bilmərik.

SELECT * FROM EMP
 WHERE IS_EMPLOYED = (SELECT IS_EMPLOYEED 
				FROM EMP WHERE EMP_NAME = ‘John’); -- this query is not valid

Kompozit məlumat növləri və ya istifadəçi məlumat növlərini təyin edir

Proqramın ehtiyacından asılı olaraq, geliştirici bir və ya daha çox məlumat növü dəyişənini bir dəyişən şəklində birləşdirir. Bu tip dəyişənlərin içərisində müəyyən edilmiş çoxlu eyni və ya fərqli əsas məlumat növləri olacaqdır. Kodlaşdırma zamanı bu tip dəyişənlərdən istifadə olunur. Bu tip məlumat növləri kompozit və ya istifadəçi tərəfindən müəyyən edilmiş məlumat növləri kimi tanınır.

Rekord kompozit məlumat tiplərindən biridir. İçərisində istənilən sayda məlumat növü ola bilər. Bunu fərqli məlumat tipli bir sıra və ya bir cədvəl kimi təsəvvür etmək olar. Çox vaxt skalar məlumat tipləri qeydlər yaratmaq üçün istifadə olunur.

Bir dəyişəni kompozit bir məlumat növü elan etmək üçün, zərurətimizə görə kompozit məlumat növünü təyin etməliyik. Sonra bu məlumat növü bu cür qeydlərə sahib olmaq üçün digər dəyişənlərə təyin edilə bilər. Əvvəlcə bunun üçün ümumi sintaksisini və sonra bir nümunəni görək.

TYPE record_type_name IS RECORD 
(Column1 DATATYPE, Column2 DATATYPE… ColumnN DATATYPE);

TYPE rc_emp IS RECORD 
(emp_id NUMBER, emp_name VARCHAR2 (15), date_of_birth DATE); -- An employee record rc_emp with datatypes number, varchar2 and Date is created.

Burada rc_emp birləşmiş məlumat növünün adıdır. Yuxarıda kompozit məlumat növü yaratmaq üçün sintaksis var. Yarandıqdan sonra iki üsulla dəyişənə təyin edilə bilər.

  • vr_emp_ qeyd rc_emp; - Fərqli məlumat tiplərinin üç sütunu ilə bir 'vr_emp_record' dəyişən elan edir. Bu dəyişən artıq bir sıra və ya məlumat cədvəlinə sahib ola bilər. Bu dəyişən daxilindəki hər sütuna vr_emp_record.emp_id, vr_emp_record.emp_name və vr_emp_record.date_of_birth kimi istinad edilə bilər.
  • Başqa bir metod qeyd növündə hər sütun üçün fərdi dəyişənlər yaratmaqdır.

rc_emp_id vr_emp_record.emp_id%TYPE;
rc_emp_name vr_emp_record.emp_name%TYPE;
rc_date_of_birth vr_emp_record. date_of_birth %TYPE; -- vr_emp_record is a record type

Mövcud cədvəl sütunlarının məlumat tiplərini təyin etməli olduğumuz zaman bu elan üsulu faydalıdır. Bu halda qeyd tipləri yaratmağa ehtiyac qalmaz, birbaşa aşağıdakı kimi məlumat tiplərini təyin etmək üçün cədvəllərdən istifadə edə bilərik. Bu, cədvəl sütunlarının məlumat tipini avtomatik olaraq təyin etmək üçün geliştiriciyə kömək edəcək və hər sütunun məlumat növünü yoxlamasına ehtiyac yoxdur. Ayrıca, məlumat növü və ya sütunların uzunluğunda hər hansı bir dəyişiklik varsa, avtomatik olaraq kodda əks olunacaqdır. Belə hallarda kodu dəyişdirməyə ehtiyac yoxdur.
rc_emp_id EMPLOYEE.emp_id%TYPE;
rc_emp_name EMPLOYEE.emp_name%TYPE;
rc_date_of_birth EMPLOYEE. date_of_birth %TYPE; -- Where EMPLOYEE is a table.

Daha yaxşı başa düşmək üçün bir nümunəni nəzərdən keçirək.
DECLARE
      TYPE rc_emp IS RECORD 
	(emp_id NUMBER, 
	emp_name VARCHAR2 (15), 
	date_of_birth DATE); -- Declaring a record type with user defined columns
	
	vr_emp_record rc_emp; -- Declaring a variable of datatype rc_emp
BEGIN
	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || vr_emp_record.emp_id);
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || vr_emp_record.emp_name);
	DBMS_OUTPUT.PUT_LINE (‘Employee Date Of Birth:’ || vr_emp_record.date_of_birth);
END;

DECLARE
	rc_emp EMPLOYEE%ROWTYPE; -- Declaring a table record type 
	rv_emp_name EMPLOYEE.emp_name%TYPE; --declaring a variable with table column type
BEGIN
	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || rc_emp.emp_id); 
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || rc_emp.emp_name);
	DBMS_OUTPUT.PUT_LINE (‘Employee Date Of Birth:’ || rc_emp.date_of_birth);
END;

Burada hər iki kod bloku eynidir və eyni nəticəni verir (təsəvvür edin ki, ƏMƏKDAŞ cədvəlində əvvəlcə təyin etdiyimiz kimi yalnız üç sütun var). Birinci kod bloku qeyd dəyişənində istifadəçi tərəfindən müəyyən edilmiş sütun məlumat tiplərindən, ikinci kod bloku isə dəyişən məlumat tiplərini təyin etmək üçün cədvəl və sütundan istifadə edir.

ROWTYPE-in üstünlüyü

ROWTYPE-in dezavantajı

Sütun məlumat növlərini açıq şəkildə müəyyənləşdirməyə ehtiyac yoxdur. Avtomatik olaraq masalardan alınacaqlar. ROWTYPE istifadə edərək bir qeyd yaradıldıqda, sütunların hamısı qeyd dəyişəninə verilir. Yaddaş bütün sütunların məlumat növlərini yaratmaq üçün istifadə olunacaq. Geliştirici kodlaşdırmaq üçün yalnız bir neçə sütuna ehtiyac duya bilər, lakin digər sütunlar da qeyddə lazımsız olaraq yaradılmışdır.
Bəzi sütun məlumat növləri və ya sütun uzunluğu üçün cədvəl dəyişdirildikdə, avtomatik olaraq kodda əks olunacaq. Cədvəl dəyişikliyi olduqda kodu dəyişdirməyə ehtiyac yoxdur.

Bu şəkildə bir məlumat növü yaradırıq. Ancaq cədvəlin sütunlarının heç bir dəyəri olmayacaqdır. Onlara dəyərləri açıq şəkildə təyin etməliyik. Yuxarıdakı kod bloklarında heç bir dəyər təyin etməmişik və heç bir şey göstərməyəcəkdir. Bu misal yalnız qeyd dəyişkənlərinin necə elan olunacağını və necə əldə ediləcəyini göstərmək üçün idi. Bir qeyd növünün dəyərlərini aşağıdakı kimi təyin edə və ala bilərik:

sintaksis

Istifadə

rekord_name.col_name: = dəyər; Bir qeydin müəyyən bir sütununa birbaşa dəyər təyin etmək və ya% ROWTYPE istifadə edərək elan olunan müəyyən bir qeyd sütununa birbaşa dəyər təyin etmək.
Col1, col2 INTO record_name.col_name1, record_name.col_name2 SEÇİN cədvəl_adı [WHERE bənd]; Hər sütunun dəyərlərini qeyd sütunlarına təyin etmək
SEÇİN * INTO qeyd_adı FROM cədvəl_adı [WHERE bənd]; Hər bir sütunun və ya bütün cədvəlin dəyərlərini bir qeydə təyin etmək
Dəyişən_ad: = record_name.col_name; Bir qeyd sütunundan bir dəyər almaq və dəyişənə təyin etmək.

 

DECLARE
	rc_emp EMPLOYEE%ROWTYPE; -- Declaring a table record type 
	rv_emp_name EMPLOYEE.emp_name%TYPE; --declaring a variable with table column type
BEGIN
	rc_emp.emp_id: = 100; -- Assigning the values
	rc_emp.emp_name: = ‘John’;

	DBMS_OUTPUT.PUT_LINE (‘EMPLOYEE RECORD’);
	DBMS_OUTPUT.PUT_LINE (‘--------------------------‘);
	-- Accessing the columns of datatype rc_emp
	DBMS_OUTPUT.PUT_LINE (‘Employee ID:’ || rc_emp.emp_id);
	DBMS_OUTPUT.PUT_LINE (‘Employee NAME:’ || rc_emp.emp_name);
END;

Records-a bənzər bir başqa bir kompozit məlumat növü də var Collections. Dizilərə bənzəyir və eyni məlumat tiplərinə sahib olacaqdır. Üç növ kolleksiya var.

Assosiativ Array və ya Cədvəl üzrə İndeks: - Bunlar (açar, dəyər) cütlü iki ölçülü massivdir. Açar hər bir dəyərin bir mövqe identifikatorudur. Əsas burada tam və ya simvol / simvol ola bilər. İçində istənilən sayda (açar, dəyər) cütlüyümüz ola bilər. Bu massivdəki məlumatların sayı üçün heç bir məhdudiyyət yoxdur, dolayısı ilə sərhədsizdir. Bu, ən çox istifadə edilən kolleksiya növüdür.

TYPE index_table IS TABLE OF value_datatype [NOT NULL] INDEX BY key_datatype;
v_ index_table index_table;

Sintaksisin üstündə index_table adı ilə value_datatype və key_datatype düymələri ilə bir kolleksiya yaradır. Kolleksiya yaradıldıqdan sonra v_index_table kolleksiya dəyişəni yaradılır.
DECLARE
TYPE salary_col IS TABLE OF NUMBER INDEX BY VARCHAR2 (20);
   v_salary_list salary_col;

v_name VARCHAR2 (25);
BEGIN
   -- Assigning the data to tables
   salary_list (‘Sophia’):= 45000;
   salary_list (‘John’):= 75000;
v_name:= salary_list. FIRST; -- Retrieving the first data
DBMS_OUTPUT.PUT_LINE (‘Salary of ‘|| v_name || ‘is ‘|| salary_list (v_name)); --it will display output as ‘Salary of Sophia is 45000. It will not display John’s detail. In order to get his details, we have to reassign v_name:= salary_list. Next and then display
END;

İç içə masalar: - Bunlar bir ölçülü massivə bənzəyir, amma içərisində hər hansı bir qeyd ola bilər. Bu növün ölçüsü qeydlər aldığımız zaman və zaman dinamik olaraq artır. Qeydlər bir-birinin ardınca ardıcıllıqla əlavə olunur, lakin ondan hər hansı bir qeyd silindikdə silinən qeyd üçün yer silinmir. Beləliklə, bu tip cədvəllər məlumat daxil edərkən sıx olacaq və tədricən seyrək olur. İçəridəki masalar PL / SQL kodunda olduğu kimi cədvəldə bir sütun kimi də istifadə edilə bilər.

Bunun üçün sintaksis aşağıdakı kimidir:

TYPE nt_name IS TABLE OF record_datatype [NOT NULL];
table_name nt_name;

burada record_datatype hər hansı bir DBMS məlumat növü ola bilər və ya bir cədvəlin hər hansı bir sütun növü ola bilər.

Məsələn; NÖVəmək haqqı SAYI CƏDVƏLİ;

VƏ NÖV əmək haqqı CƏDVƏLİDİR ƏMƏKDAŞ% NÖV;

Proqramın içərisində içəri yerləşdirilmiş cədvəllərin necə elan ediləcəyi, yaradılacağı və daxil olacağı göstərilir.

DECLARE
TYPE nt_salary IS TABLE OF NUMBER;
TYPE nt_empname IS TABLE OF VARCHAR2 (20);

   nt_salary_list nt_salary;
 nt_emp_list nt_empname;
BEGIN
   -- Assigning the data to nested tables
 nt_emp_list: = nt_empname (‘Sophia’, ‘James’, ‘Bryan’);
nt_salary_list: = nt_salary (20000, 40000, 60000);

-- Retrieving the records of nested table
FOR i IN 1... nt_emp_list.count LOOP -- nt_emp_list.countwill give total number of records in the nested table
      DBMS_OUTPUT.PUT_LINE (‘Salary For ‘||nt_emp_list (i) || ‘: ‘||nt_salary_list (i)); 
END LOOP;
END;

Çıxış belə olacaqdır:

Sofiya üçün əmək haqqı: 20000

James üçün əmək haqqı: 40000

Bryan üçün əmək haqqı: 60000

Dəyişən massiv (varray): - Bu, iç içə düzülmüş massivə bənzəyir və sabit sayda qeyd olması şərtilə bir ölçülü massiv kimi qəbul edilə bilər. İçəridə olan cədvəllərdən fərqli olaraq, bu massivdəki qeydlərin sayını əvvəlcədən elan etməliyik və proqramda istifadə edilə bilər. Bundan əlavə, serialın fərdi qeydlərini silə bilmərik. Bu xüsusiyyətlərə görə inkişaf etdiricilərin bu massivi istifadə etməsi ehtimalı azdır. Proqramlarında assosiativ massivə və ya iç içə masalara üstünlük verirlər.

Varray üçün sintaksis:

TYPE varray_name IS VARRAY (index) OF DATATYPE;

Məsələn: - NÖV va_ əmək haqqı VARRAYDIR (4) SAYI;

va_salary_list və_salary;

Proqramın aşağı hissəsində varray-ın necə elan olunacağını, yaradılacağını və daxil olacağını göstərir.

DECLARE
		TYPE va_salary IS VARRAY (4) OF NUMBER;
		TYPE va_empname IS VARRAY (4) OF VARCHAR2 (20);
		
   va_salary_list va_salary;
 va_emp_list va_empname;
BEGIN
   -- Assigning the data to varray
 va_emp_list: = va_empname (‘Sophia’, ‘James’, ‘Bryan’);
va_salary_list: = va_salary (20000, 40000, 60000);

-- Retrieving the records of varray
FOR i IN 1... va_emp_list.count LOOP -- va_emp_list.countwill give total number of records in the varray
      DBMS_OUTPUT.PUT_LINE (‘Salary For ‘||va_emp_list (i) || ‘: ‘||va_salary_list (i)); 
END LOOP;
END;

Çıxış belə olacaqdır:

Sofiya üçün əmək haqqı: 20000

James üçün əmək haqqı: 40000

Bryan üçün əmək haqqı: 60000

Üç növ kolleksiyanın müqayisəsi aşağıda verilmişdir.

Kolleksiya növü Qeydlərin sayı Açar növü Sıx və ya seyrək Harada yaradıldı Obyekt Növü Atributu ola bilər
Assosiativ massiv (və ya indeks üzrə cədvəl) Sərhədsiz Simli və ya tamsayı Ya Yalnız PL / SQL blokunda Yox
İç içə masa Sərhədsiz Tam Sıx başlayır, seyrək ola bilər Ya PL/SQL blokunda, ya da sxem səviyyə bəli
Dəyişən ölçülü massiv (Varray) Məhduddur Tam Həmişə sıx Ya PL / SQL blokunda və ya şema səviyyəsində bəli

İstinad məlumat növləri

Bu məlumat növü proqramdakı mövcud məlumatlara aiddir. Dəyişənə işarə kimi davranır. Referans məlumat növü nümunələrindən biri də resursordur. Onlar statik imlecə istinad etmək və istifadə etmək üçün istifadə olunan kursor dəyişənləridir. Bu dəyişəni prosedurlara / funksiyalara ötürə bilərik və funksiyaları bir resursor olaraq əldə edə bilərik. Qısacası bir dəyişən işləyir, ancaq iş vaxtında təyin olunan sorğuya istinad.

Aşağıdakı proqramda kursorla refursor arasındakı fərqi görə bilərik. Ətraflı SQL məqaləsində bu barədə daha çox məlumat əldə edəcəyik.

DECLARE
           TYPE rc_cursor is ref cursor; 
	CURSOR c_course IS
		SELECT * FROM COURSE;
           l_cursor rc_cursor;
         n_ID NUMBER;
BEGIN
	IF n_ID = 10 THEN
	-- Dynamically opens the cursor for student ids less than 10
		Open l_cursor FOR ‘SELECT * FROM STUDENT WHERE STD_ID<= 10’;
	ELSE	
	-- Dynamically opens the cursor for student ids greater than 10
		OPEN l_cursor FOR ‘SELECT * FROM STUDENT WHERE STD_ID > 10’;
	 END IF;
	-- Opens static cursor c_course
	 OPEN c_course;
END;

LOB məlumat növləri

Bu tip məlumat növləri bir sütunda / dəyişkəndə çox böyük miqdarda məlumat saxlamaq üçün istifadə olunur. Faylları musiqi, qrafika və s. Kimi saxlaya bilər. Aşağıdakı LOB məlumat tiplərinə sahibik:

Məlumat növü Alt məlumat növü təsvir saxlama

LOB Məlumat növü

BFILE Əməliyyat sistemi faylında böyük ikili obyektləri saxlamaq üçün istifadə olunur. BFILE, serverdə saxlanılan ikili bir obyektə işarə edən tam fayl axtarış yolunu saxlayır. BFILE məlumat növü yalnız oxunur, onları dəyişdirə bilməzsiniz. Ölçü: 4 GB-a qədər (232 - 1 bayt)
Kataloq adı: 30 simvol
Fayl adı: 255 simvol
Blob BFILE ilə eynidir, strukturlaşdırılmamış ikili obyekti Əməliyyat sistemi faylında saxlamaq üçün istifadə olunur. BLOB tipli tam dəstəklənən əməliyyatlar bərpa olunur və təkrarlanır. Ölçü: 8 TB-dan 128 TB-a qədər
(4GB - 1) * DB_BLOCK_SIZE
QALDIR Xarakter məlumatlarının böyük blokları bu məlumat növündən istifadə edərək verilənlər bazasında saxlanılır. Tək bayt və çox bayt simvol məlumatlarını saxlayın. CLOB növləri tam dəstəklənən əməliyyatlardır və bərpa oluna və təkrarlanır. Ölçü: 8 TB-dan 128 TB-a qədər
(4GB - 1) * DB_BLOCK_SIZE
NCLOB Məlumat bazasında NCHAR məlumatlarının böyük bloklarını saxlamaq üçün NCLOB məlumat növü. Tək bayt və çox bayt simvol məlumatlarını saxlayın. NCLOB tipli tam dəstəklənən əməliyyatlar bərpa olunur və təkrarlanır. Ölçü: 8 TB-dan 128 TB-a qədər
(4GB - 1) * DB_BLOCK_SIZE

Naməlum sütun növləri

Dəyişənləri elan etmək üçün istifadəçi tərəfindən müəyyən edilmiş məlumat tiplərində bunu gördük. Buna naməlum sütunlar deyilir, çünki bu tip məlumat növləri əsas məlumat tipləri deyil və istifadəçi və ya cədvəllər tərəfindən müəyyən edilir. Geliştirici yalnız ad və ya bəyannamə görərək məlumat növünü proqnozlaşdırmır. Anlamaq üçün qeyd məlumat növünün tərifini görməlidir.

Məlumat növü Alt məlumat növü

təsvir

Naməlum sütun məlumat növləri

Növü Bilinməyən məlumat növü ilə tək sütunu saxlamaq üçün istifadə olunur. Sütun% TYPE məlumat növü ilə müəyyən edilir.
Məsələn, EMP.ENO% NÖV
ROWTYPE Bütün sütunların məlumat növünü bir cədvəldə saxlayır. Bütün sütunlar% ROWTYPE məlumat növü ilə müəyyən edilir.
Məsələn, EMP% ROWTYPE -> bir masa EMP cədvəlinin bütün sütun məlumat növləri ilə təyin ediləcək
% ROWID ROWID məlumat növüdür. ROWID genişləndirilmiş və ya məhdudlaşdırılmış iki növdür. Genişləndirilmiş ROWID dönüşü 0 və məhdudlaşdırılmış ROWID dönüşü 1 əks halda sıra nömrəsini qaytarır.
Bəzi funksiyalar ROWID-də müəyyən edilir və DBMS_ROWID paketində müəyyən edilir.

Function ROWID

təsvir

ROWID_DOĞRULA ROWID-in uzadıla biləcəyini təsdiqləyir.
ROWID_TYPE 0 = ROWID, 1 = uzadıldı.
ROWID_BLOCK_NUMBER Rekord qayıdışı olan blok nömrəsi 1.
ROWID_OBJECT Qeyddə olan obyektin sayı.
ROWID_RELATIVE_FNUMBER Qeydi ehtiva edən nisbi fayl nömrəsini qaytarır.
ROWID_ROW_NUMBER Qeydin sıra nömrəsi.
ROWID_TO_ABSOLUTE_FNUMBER Mütləq sənəd nömrəsini qaytarın.
ROWID_TO_EXTENDED ROWID-i genişlənmiş formata çevirir.
ROWID_TO_STRICTED ROWID-i məhdud formata çevirir.

Dəyişənlər

Dəyişənlər bir proqramda məlumatların müvəqqəti saxlanılması üçün istifadə olunur. Proqramdakı məlumatları manipulyasiya edərkən nəticələri tutmaq üçün vasitəçi yer tutur. Hər dəyişənin saxlayacağımız məlumat növündən asılı olaraq məlumat növü olacaqdır. Məlumat tipləri yuxarıda gördüyümüz sütun məlumat növləri ilə eyni olacaq.

Dəyişən elan etmək üçün sintaksis

Dəyişən_ad TARİXİ;

Dəyişənə default dəyər də təyin edə bilərik. Bir dəyişən NOT NULL olaraq elan edildikdə, default dəyər təyin edilməlidir.

Variable_name DATATYPE: = value; 
Variable_name DATATYPE NOT NULL: = value; 

n_age NUMBER NOT NULL: = 18;
v_name VARCHAR2 (25);

Bir proqramda birbaşa dəyişənə dəyər təyin edə bilərik və ya sütunların dəyərini əldə etmək üçün sorğuda istifadə edə bilərik.

Dəyişənlərin əhatə dairəsi

Bir PL / SQL proqramında bir çox bloka sahib ola bilərik, yəni; bir-birinin içərisində çox BAŞLI - SON bloklara malikdir.  Bu bloklarda dəyişənlər elan edildikdə, bloklarına münasibətdə hərəkət edirlər.

Blok içərisində elan edilmiş bir dəyişən yalnız bu blok üçün əldə edilə bilər. Bu cür dəyişənlərə deyilir yerli dəyişənlər. Onlara heç bir xarici blok daxil ola bilməz. Daxili bloklarımız olduqda, xarici blokları tərəfindən elan edilmiş dəyişənlərə daxil ola bilərik. Belə dəyişənlərə deyilir qlobal dəyişənlər.

DECLARE
	n_age NUMBER; -- Global Variable
BEGIN
	SELECT AGE INTO n_age FROM PERSON WHERE SSN = 323234;
	DECLARE
	v_name VARCHAR2 (30); -- Local Variable, accessible only inside this block
	BEGIN
		SELECT PERS_NAME 
			INTO v_name 
		    FROM PERSON WHERE SSN = 323234;
		DBMS_OUTPUT.PUT_LINE (‘Name of the Person is ‘|| v_name);
	END;
DBMS_OUTPUT.PUT_LINE (‘Age of the Person is ‘|| v_name);
END;

sabitləri

Adından da göründüyü kimi proqramda sabitdirlər. Bunlar hərfi dəyəri olan dəyişənlərdir və proqram boyunca qalıqları dəyişməzdir. Bunlar proqramda həqiqi dəyərlərin istifadəsini təkrar-təkrar azaltmaq üçün istifadə olunur. Sabit elan etmək və əvvəlində bir dəfə bir dəyər təyin etmək və sonra proqram boyunca sabitdən istifadə etmək proqramı təmiz və başa düşülən edir. Həm də sabit dəyərdə hər hansı bir dəyişiklik olarsa, bütün kodu sona qədər dəyişdirmək əvəzinə yalnız bir yerdə dəyişməliyik.

Sabit üçün sintaksis:

constant_name CONSTANT DATATYPE: = value; -- value has to be assigned without fail, since it is a constant
	pi CONSTANT NUMBER (2, 2): = 3.14;
	incr_percentage CONSTANT NUMBER: = 10;
	declared_holiday CONSTANT VARCHAR2 (7): = ‘SUNDAY’;

Bir proqramda bu sabitlər hər hansı bir normal dəyişən kimi istifadə olunur. Dəyişəndən yalnız fərq sabitin dəyərini dəyişə bilməməyimizdir.

xülasə

TARİXLƏR

 

 

 

ALT TARİXLƏR

SQL-də məlumat növləri

SQL-də alt məlumat tarixləri

Skalyar məlumat növləri

Obraz

CHAR

 

XÜSUSİYYƏTLƏR

 

VARCHAR2

STRING

VARÇAR

NCHAR

 

NARCHAR2

 

RAW

 

LONG

 

UZUN XAM

 

ROWID

 

UROWID [(ölçü)]

 

Elektron

SAYI (s, s)

İNTEGER

INT

KIÇIQ

DEC

DECIMAL

SAYI

REAL

ÇİFT DƏZİYYƏT

SAL

BINARY_INTEGER

TƏBİİ

POSITIVE

Təbii

Müsbət

İmzalamaq

PLS_INTEGER

 

Boolean

 

 

Tarix vaxt

TARİXİ

 

TAMESTAMP

 

Kompozit məlumat növləri / İstifadəçi məlumat növlərini təyin edir

RECORD

 

 

COLLECTION

Assosiativ Array / Cədvəl üzrə İndeks

 

İç içə masalar

 

Dəyişən Array (Varray)

 

İstinad məlumat növləri

 

Ref Kursor

 

LOB məlumat növləri

 

BFILE

 

 

Blob

 

 

QALDIR

 

 

NCLOB

 

Naməlum sütun növləri

 

Növü

 

 

ROWTYPE

 

 

% ROWID

 

arayış

Translate »
1