Oracle Ders 38 – Views – 03 Complex View – 02

Merhaba Arkadaslar,
Bu yazimizda View konusuna kaldigimiz yerden devam edecegiz. Bir onceki yazida Complex View konusundan bahsetmistik.

Iki/veya daha fazla tabloyu birlestirdigimizde/ join ve bu yapidan bir view olusturdugumuzda bu yapimiz Complex View olacaktir. Bundan bir onceki yazida da bahsetmistik.

Join islemi ile Complex View ve DML islemleri
Daha once kullandigimiz genel view formatini kullanmaya devam ediyoruz.

create or replace view prices
as select isbn , title, cost , retail , retail-cost profil, name
from books join publisher using(pubid);

Books ve Publisher tablosunu join ile birlestirdik sonrasinda prices adinda yeni bir view olusturduk.

Simdi de su sorgumuzu calistiralim ;

select * from prices where title like '%REVENGE%';

oracle ders 38 complex view 1

View uzerinden retail alanini guncelleyelim / update.

update prices
set retail = 30 where title like '%REVENGE%';

Ilgili kitap icin 22 olan retail degerini 30 yaptik.

oracle ders 38 complex view 2

Peki su ornek sorgumuzu deneyelim ;

update prices
set name = 'newpublishername'
where title like '%REVENGE%';

SQL Error: ORA-01779: cannot modify a column which maps to a non key-preserved table
01779. 00000 – “cannot modify a column which maps to a non key-preserved table”

Hata ile karsilastik ,
View Books ve Publisher tablolarinin joinlenmesi sonucu olusmaktadir.View i olustururken kullandigimiz alanlari/column inceleycek olursak Books tablosunun primary key alani olan ISBN varken Publisher tablosunun primary key i olan pubid bulunmamaktadir.

Peki pubid alanini ekleyip tekrar deneyelim ;

create or replace view prices
as select isbn ,pubid,title, cost , retail , retail-cost profil, name
from books join publisher using(pubid);

Simdi artik pubid alanimiz/column da view’ imize dahil oldu.

select * from prices;
oracle ders 38 complex view 3

Tekrar update islemini gerceklestirelim ;

update prices
set name = 'newpublishername'
where title like '%REVENGE%';

View’imizde Books tablosunda yer alan ISBN alani bulunmaktadir . Bu alan/column books tablosu icin primary keydir. Books tablosuna key-preserved table denilir.

Publisher tablosunun primary key alani , pubid, view’imizde dahil degildi. Bu alani view yapimiza eklememize ragmen yine de update islemini gerceklestiremedik. Cunku dikkat ederseniz pubid , books tablosu icin foreign key alanidir  ve yine yukaridaki select sonucu donen verileri inceleyecek olursak pubid alanindan 2 tane 1 , 4 tane 4 vb bulunmaktadir.Bu nedenle publisher tablomuz non-key-preserved table dir.

DML islemleri non-key-preserved tablo uzerinde gerceklesmez!

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *