Bir Gorunum(view) olusturmak
· Bir veritabanında yer alan tablolar ve bu
tablolardaki alanların sorgulama yapılarak kullanılması ve çıkan sonuçların bir
geçici dosyada (VIEW) tutulması işlemidir.
· Tablolar arasında bağlantılar kullanılarak
sorgulamanın her seferinde yeniden yazılması yerine bir kez yazılarak
sonuçların görüntü tablosunda tutulması ve bu tablo üzerinden de sorgulamaların
yapılması hız, zaman ve performans kazandıracaktır.
· Yaratılmış olan görüntü tablosu üzerinde INSERT,
DELETE ve UPDATE işlemleri yapılamaz.
· Ancak
görüntü tablosunu oluşturan tablolara yeni bir kayıt eklenmesi, değiştirilmesi
ve silinmesi durumlarında görüntü tablosunda da güncelleştirmeler yapılacaktır.
· Görüntü tabloların kullanılması, veritabanında
ilgili tabloların üzerinde bağlantıların tekrar tekrar kurulması engellenmiş
olacaktır. İş süreçlerine bağlı olarak özellikle ekran veya yazıcı raporların
alınması, sorgulamaların gerçekleştirilmesi gibi amaçlarda kullanılır.
· Görüntü dosyasının yaratılması sırasında GROUP
BY ile sıralama yapılması özelliği kullanılmaz. Buna karşılık ORDER BY özelliği
kullanılabilir.
Create view (VIEW_ADI)
as
select * from (TABLO_ADI)
order by (Column_1,column_2,..);
· Gorunumler herhangi bir veri icermez. Tablolarsa
veri icerir.
NOTE:
Bir tablodaki veriler degistigi anda,bu tabloyla olusturulan butun viewler degisir.
·
CREATE or REPLACE VIEW tablo_adi AS
SELECT .....;
NOTE:Görunume taninmis olan butun ayricaliklari
koruyarak gorunumu tekrar olusturmak icin, CREATE or REPLACE VIEW komutunu kullanmaliyiz.
FORCE: Görüntüyü oluşturacak tablo olmasa dahi görüntünün
oluşturulmasını sağlar.
CREATE VIEW veysi_yeni AS
SELECT * FROM olmayan_bir_tablo;
FROM olmayan_bir_tablo
*
ERROR at line 3:
ORA-00942: table or view does not exist
CREATE FORCE VIEW veysi_yeni AS
SELECT *
FROM olmayan_bir_tablo;
Warning: View created with compilation errors.
SQL> SHOW ERRORS VIEW veysi_yeni;
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 ORA-00942: table or view does not exist
SELECT *
FROM veysi_yeni;
FROM veysi_yeni
*
ERROR at line 2:
ORA-04063: view "SYSTEM.VEYSI_YENI" has errors
Şimdi de ilgili tabloyu
yaratalım;
CREATE TABLE olmayan_bir_tablo AS
SELECT *FROM olan_bir_tablo;
SELECT *
FROM veysi_yeni;
Az önce hata veren görüntü, şimdi sadece
satır olmadığını gösteriyor. FORCE ile yarattığımız görüntüyü artık
kullanabiliriz.
NONFORCE: Görüntüyü oluşturacak tablo olmadan görüntünün
oluşturulmasına izin vermez. Saten standart olarak belirtilede bilir.
---- Bolumler
adinda bir tablo olusturuyorum ---
CREATE TABLE bolumler (
bolum_no number(3),
adi varchar2(15),
CONSTRAINT pk_bolum PRIMARY
KEY
);
---- Ogrenci adinda
bir tablo olusturuyorum ---
CREATE TABLE ogrenci (
Ogrenci_no varchar2(10),
Adi varchar2(15),
Soyadi varchar2(15),
Ogr_bolum number(3),
CONSTRAINT fk_bolum FOREIGN
KEY (ogr_bolum) REFERENCES bolumler (bolum_no)
);
---- View_ogr_bolum
adinda bir view olusturuyorum ---
CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
FROM ogrenci a, bolumler b
WHERE a.ogr_bolum = b.bolum_no;
Bu örnekte OGRENCI
tablosundaki “adi” ve “soyadi” alanları birleştirilerek “ISIM” alanı olarak,
BOLUMLER tablosundaki bolum adi “adi” alanı ise “BOLUM” alanı olarak
kullanılmıştır.
SELECT *
FROM view_ogr_bolum
ORDER BY isim;
Salt okunur(read only) bir gorunum olusturmak!!
User’lerin view
araciligi ile kayitlari degistirlerini onlemek icin Create view komutunun with read only kalibini
kullanabilirsiniz.
Bir oncekili
yarattigimiz tabloyu ele alalim.
CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
FROM ogrenci a, bolumler b
WHERE a.ogr_bolum = b.bolum_no;
Bir user OGRENCI YADA BOLUMLER tablosundan kayit slime yetkisi varsa,Bu kullanici OGRENCILER
yada BOLUMLER kayitlarini VIEW_OGR_BOLUM gorunumu uzerinden de silebilir.
Bu user ayni zamanda INSERT ve
UPDATE operasyonlarini VIEW_OGR_BOLUM gorunumu uzerinde gerceklestirerek
OGRENCILER yada BOLUMLER tablosuna kayit ekleyebilir ve kayitlari
guncelleyebilir.
Bunlari engellemek icin VIEW
READ ONLY olarak yaratilabilir.
CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
FROM ogrenci a, bolumler b
WHERE a.ogr_bolum = b.bolum_no WITH READ ONLY;
User bu sayede sadece kayitlari
secebilir.
DROP VIEW Komutu (DROP VIEW Statement)
Yaratılmış bir görüntü
tablosunun veritabanından silinmesi için kullanılır.
DROP VIEW <tablo_adi> şeklinde
kullanılır. Özellikle yaratılmış ve programlar tarafından kullanılmakta olan
bir görüntü tablosunun silinmesi durumunda programların çalışmayacağı unutulmamalıdır.
Bir görüntüyü sildiğimiz zaman data
dictionary'den bütün bilgileri silinecek, üzerindeki bütün haklar kalkacak ve
bu objeye bağlı olan diğer görüntüler de geçersiz kılınacaktır ve yeniden
düzenlenmesi gerekecektir.
Bir görüntü üzerinden DML uygulama
şansına sahipsiniz ancak aşağıdaki koşulların görüntü için geçerli olmaması
gerekmekte yani görüntünün içeriğinin içerisinde bulunmaması gerekmekte.
1) DISTINCT veya UNIQUE
2) GROUP BY
3) START WITH
4) CONNECT BY
5) ROWNUM
6) Bütün SET operatörleri (UNION, UNION ALL, INTERSECT, MINUS)
7) SELECT içerisinde bir altsorgunun varlığı