Mündəricat
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
- Skaler məlumat növləri: - Rəqəmlər, onluqlar və s. Kimi skaler dəyərləri saxlamaq üçün istifadə olunur.
- Kompozit məlumat növləri: - Bu adətən skalar məlumat tiplərinin digər məlumat tiplərinin birləşməsidir.
- İ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.
- LOB məlumat növləri: - Şəkillər, videolar və s. Kimi böyük obyektlərin saxlanması üçün istifadə olunur
- Naməlum Sütun növləri: - sütun növləri bilinmədikdə, bu məlumat növü istifadə olunur.
- İ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 |
|