A Oracle DBA's BLOG

Welcome to my ORACLE DBA blog. You will be Amazing!!!

Tuesday, December 20, 2011

Creating View for beginers

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ığı

No comments:

Post a Comment