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.

oracle ders 36 view 0

select * from bookview;

oracle ders 36 view1

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

Print Friendly, PDF & Email

Leave a Reply

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