Oracle 12c versiyasında cədvəldə Identity column-un yaradılması
Oracle 12c versiyasında SQL –də edilmiş yeniliklərdən biri də İdentity column yaratmaq imkanıdır.

İdentity column dedikdə cədvələ sətrlərin əlavə olunduğunda qiyməti avtomatik artan sütun nəzərdə tutulur. Əsasən, cədvəllərin İD sütununda istifadə olunur. Əvvəlki versiyalarda bunu təmin etmək üçün sequence yaradıb, trigger (pl/sql ilə) yazmaq tələb olunurdu. 12c versiyasında isə bu iş xeyli asanlaşıb və həmçinin yalnız sql ilə  reallaşdırmaq mümkündür. Aşağıda yeni yaradılmış İdentity column imkanını qısa şəkildə izah etməyə çalışacağam.
 
İdentity column yaratmazdan əvvəl bir neçə qaydasını sadalayaq:
     1)      Bir cədvəldə yalnız bir ədəd İdentity column ola bilər.
     2)      İdentity column number məlumat tipi kimi təyin olunur.
     3)      İdentity column üçün default kimi hər hansı digər qiymət təyin etmək olmaz.
     4)      Əgər cədvəlimizdə İdentity column varsa, onun əsasında create table as select istifadə etməklə          başqa cədvəl yaradarıqsa, həmin sütunun yeni cədvəldə tipi identity olmayacaq, sadə number tipi        olacaqdır.
 
Beləliklə, İdentity column –a malik olan bir cədvəl yaradaq:
create table test1(id number generated as identity, category varchar2(10));
Yaratdığımız test1 cədvəlinə 1 sətr əlavə edək:
insert into test1(category) values(‘A’);
commit;
Əlavə olunan sətrin İD sütununa nəzər yetirək:
select * from test1;
Göründüyü kimi, ilk sətir üçün İD (İdentity column) sütununa 1 qiyməti yazıldı.
Test1 cədvəlinə ikinci sətri əlavə edib, yenidən İD sütununun qiymətinə nəzər yetirək:
insert into test1(category) values(‘B’);
commit;
select * from test1;
İkinci sətrin İD-si ardıcıl olaraq 2 qiymətini aldı.
Cədvəldə İD=2 olan sətrin category sütunun qiymətini update edək:
update test1 set category = ‘B-1’ where id=2;
commit;
select * from test1;
Göründüyü kimi, update uğurla icra olundu və fərqli heç nə baş vermədi.
Test1 cədvəlinin İdentity kimi təyin etdiyimiz İD sütununa insert comandası ilə istədiyimiz qiyməti verməyə çalışaq:
insert into test1(id, category) values(3, ‘C’); — error
Və aşağıdakı update əmrini icra etməyə cəhd edək
update test1 set id = 3 where id=2; –error
Şəkillərdən göründüyü kimi, sonuncu insert və update əmrləti uğursuz oldu. Bu, o deməkdir ki, generated as identity kimi təyin olunmuş sütuna manual olaraq istənilən qiyməti yazmaq olmaz. Yalnız insertdə hər yeni sətir üçün avtomatik qiymət ala bilir.
İD sütununa özümüz istədikdə qiymət verə bilməyimiz üçün, sütunun tipində bir qədər dəyişiklik  (by default) etməliyik:
alter table test1 modify(id number generated by default as identity);
Dəyişikliyi etdikdən sonra yenidən yuxarıda cəhd etdiyimiz insert və update əmrlərini uğurla icra edə bilərik:
insert into test1(id, category) values(3, ‘C’); –ok
update test1 set id = 4 where id=2;  –ok
commit;
select * from test1;
Nəticədən görünür ki, sonuncu hər iki sql əmri uğurla icra olunub.             
Bundan sonra test1 cədvəlinə yeni bir sətr əlavə edək (İD sütununa qiymət ötürmədən);
insert into test1(category) values(‘D’);
commit;
select * from test1;
 
Nəticədən göründiyi kimi, bizim manual olaraq insert etdiyimiz 3 qiymətinə baxmayaraq, İdentity column-un avtomatik artan qiymətinin növbətisi 3 olduğundan, yeni sətrin İD sütununun qiyməti 3 -dür.
Ümid edirəm, qısa da olsa, müəyyən qədər aydınlıq gətirə bildim.

 

Comments: 2

Leave a comment