Oracle Ders 36 – Views – 01 Simple View
Merhaba Arkadaslar,
Bir kac yazi boyunca Oracle’ da View/Goruntu konusunu inceleyecegiz.
View konusundaki konu basliklarimiz ;
- Simple View
- Complex View
- Inline View
- Materialized View
Viewler tablolarin bir gorunumu olan database objeleridir ve
Viewler veri tutmazlar , ilgili tablonun sorgusunu tutarlar.
Viewlerin amaclari ;
- Karisik SQL sorgularini basitlestirmek
- Veriye erisimi kisitlandirmak.
Karisik SQL sorgularini basitlestirmekten kasit ; ornegin bir kac tabloyu birlestiriyoruz / join ve/veya order by / group by gibi islemler gerceklestiriyoruz. Bu SQL sorgusundan bir View olusturdugumuzda , basit bir SQL sorgusu ile ayni komplike sekilde elde edilmis verilere ulasabiliriz.
Veriye erisimi kisitlandirmaktaki kasit ; ornegin sirketteki calisanlarin bilgilerinin tutuldugu bir tablomuz var ve burada maas bilgisi oldugunu varsayalim. X biriminin bu tabloya ulasmasi gerekmektedir. Burada maas bilgisini gizlemek icin , X birimine gercek ilgili tablodan olusturulmus ve maas bilgisinin olmadigi bir view verilebilir.
View Olusturma
Bir view olustururken kullanabilecegimiz genel format ;
CREATE [OR REPLACE] [FORCE | NOFORCE ] VIEW viewname (columnanem ,...) AS SELECT statement [WITH CHECK OPTION [CONSTRAINT constraintname] [WITH READ ONLY];
- create view / create or replace view : Yeni bir view/goruntu olusturmak icin create view kullaniriz. create or replace view ile yeni bir view olusturulur veya var olan view’in eski versiyonu yerine guncel versiyonu gelir.
- force/noforce : noforce varsayilan moddur. Anlami ; tum tablo ve alanlar gecerli/var olmalidir yoksa view olusturulmaz.
force ile gecersiz bir tablo olsa da view olusturulur. Bu yaklasim genel olarak yeni bir database gelistirilirken kullanilmaktadir. - with check option ve with read only yapisini ornek uzerinde inceleyecegiz.
Simple View
Simple View ; sadece bir tablo uzerinde ve group function veya expression(ifade) retail-cost gibi veya group by icermeyen sorgudan olusturulur. Cumle bile daha karisik oldu kisacasi en basit select sorgusundan olusturulan viewlerdir 🙂
create view bookview as select isbn,title, retail from books;
Books tablomuzdan isbn,title ve retail alanlarini cektik aldik ve ilgili verileri getirdik.
View’imiz basariyla olustu. SQL Developer programimizda ilgili dizin altinda olusturdugumuz view gozukmektedir.
select * from bookview;
Bookview e yeni bir kayit ekleyelim ;
insert into bookview values ('1','JAVA',100);
Bookview e ekledigimiz kayit , Books tablosuna da eklenir.
select * from bookview; select * from books;
DML (Database Manipulation Language) islemlerini (insert/update/delete) engellemek view olustururken icin with read only ifadesini view’imize ekleriz.
create or replace view bookview as select isbn,title, retail from books with read only;
Bookview i yeniden olusturduk.Hali hazirda bookview var oldugu icin or replace i ekledik. Simdi yeni bir kayit eklemeye calisalim ;
insert into bookview values ('2','Oracle',100);
Error report:
SQL Error: ORA-42399: cannot perform a DML operation on a read-only view
Gordugunuz gibi Oracle bize hemen hatayi basti 🙂
with check option ifadesini anlamak icin yeni bir tablo olusturalim ve uzerinde inceleyelim ;
create table with_check_option( col1 number, col2 varchar2(10) ); insert into with_check_option values (10, 'A'); insert into with_check_option values (20, 'B'); insert into with_check_option values (30, 'C'); insert into with_check_option values (40, 'D'); insert into with_check_option values (50, 'E');
Tablomuzu olusturduktan sonra yeni bir view olusturalim ;
create or replace view wco_view as select * from with_check_option where col1<40;
view’i olustururken col1 alanin 40tan kucuk olan kayitlari goruntulemesini belirtim.
Simdi view uzerinden yeni bir kayit ekleyelim ;
insert into wco_view values (60, 'F');
Kayit basariyla eklenir fakat viewde bu kaydi goremeyiz cunku view olustururken col1<40 sartini belirtmistik , bizim ekledigimiz kayitta col1 alani 60.
Bu sekilde viewde goremeyecegimiz bir kaydi view uzerinden insert/update etmeyi engellemek icin , viewimizi olustururken with check option ile yazmamiz gerekir.
create or replace view wco_view as select * from with_check_option where col1<40 with check option;
View’imizi guncelledikten sonra view uzerinden yeni bir kayit eklemeye calisalim ;
insert into wco_view values (70, 'G');
SQL Error: ORA-01402: view WITH CHECK OPTION where-clause violation
01402. 00000 – “view WITH CHECK OPTION where-clause violation”
Not: Bu kaydi tablomuz uzerinden ekleyebiliriz , kontrol view uzerindedir.
insert into with_check_option values (70, 'G');
Sadece insert islemi degil update islemi uzerinde de kontrol vardir ;
update wco_view set col1=50 where col2 = 'A';
Oracle ,wco_view uzerinden col1 alanina 50 degerini atamiza izin vermeyecektir , fakat kosulu saglayan update islemine izin verecektir. (where col1<40)
update wco_view set col1=5 where col2 = 'A';
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply