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.
This comment has been removed by the author.
ReplyDeleteDəyərli məlumat üçün təşəkkür edirik Şahin m.
ReplyDelete