2.1. ORACLE VERİTABANI


         
Oracle veritabanına bakıldığında iki kısımdan oluştuğu görülmektedir. Bunlarda birisi Fiziksel kısım. Diğeri de Mantıksal kısımdır. Fiziksel kısım, işletim sistemini kullanarak görülebilen dosyalardır. Yani Oracle kurulduğunda veya daha database de yeni nesneler oluşturulduğu taktirde oluşan fiziksel dosyalardan oluşur. Bunlar Datafile, Controlfile, Log file dir. Mantıksal kısım ise, Table, Tablespace, İndex, View, User, Sequence gibi database nesnelerinden oluşmaktadır. Bu nesnelere erişim sadece Oracle bağlanıp onun üzerinden SQL cümlecikleri ile gerçekleştirilebilir. Aşağıdaki Oracle database’inin yapısı gözükmektedir.

            Şekil 2.1. Oracle Database Yapısı

 

           

2.2. ORACLE NESNELERİ

 

2.2.1. Index  Tanımı:                                           
           
Table’larda aranan kayıta daha çabuk erişebilmek için tanımlanan nesnelerdir. İndex tanımlamaları, tablo içinde en fazla aranan alanlara göre yapılır. Örneğin bir kişiye ait bilgiler aranıyorsa o kişeye ait ID ve AD alanları üzerinde aramamızı gerçekleştirelim. Bunu işlemi hızlandırmak için ID ve AD alanlarına göre bir index tanımlamamız gerekir.
İndex’ler bir tablonun bir alanı üzerinden tanımlanabileceği gibi birden fazla alanı üzerinden de tanımlanabilir. İndex tanımlaması yapıldığı zaman, index alanındaki bilgiler sıralanır ve her bir kaydın numarası alınır yenir segmentte kaydedilir.

2.2.2.      ROLE (ROL) Tanımı :

           
Oracle veritabanında nesneler USER’lara aittir. Bir USER         sahip olduğu nesneyi başka bir USER’ın kullanımına sunabilir. Bunun için o USER’a hak vermesi gerekir.  Birkaç tane kullanıcı olduğu zaman bu işlem pek problem olmamaktadır. Ancak kullanıcı ve nesne sayısı arttıkça bu işlemi gerçekleştirmek oldukça zorlaşmaktadır. İşte Role’ler bu noktada işlemleri kolaylaştırmaktadır.
Role, veritabanındaki hakların gruplandırılmış halidir. Örneğin, USERS adlı bir table da birden fazla kullanıcının sadece SELECT, INSERT, ve de UPDATE işlemleri yapması gerekiyor. Bu işlemi geçekleştirmeye kalkışsan her bir kullanıcıya teker teker bu hakları atamamız gerekir. 100 tane kullanıcı için bu işlemi yapmaya kalkıştığımızı düşünürsek bayağı bir baş ağırısına neden olacaktır. Oysa bu hakları içeren bir ROLE  oluşturursak  işlemi 4 kat daha az zaman harcayarak yapmış oluruz.

 

2.2.3.      SYSTEM PRİVİLEGES Tanımı:

           
Database  ile ilgili ve kullanıcılara verilebilecek önceden tanımlanmış olan haklardır. Bu haklar SYSTEM ve SYS kullanıcıları tarafından diğer kullanıcılara verilebilmektedir. Bu haklar ve anlamları EK-1 de verilmiştir.

2.2.4.      SEQUENCE Tanımı :
 
           
Özellikle unique olması gereken alanlarda otomatik olarak artan numara verilmek istendiği zamanlarda kullanılan nesnelerdir. Sequence oluşturma ve kullanımı daha sonraki bölümlerde aktarılacaktır.

2.2.5.      TABLE (Tablo) :       
           
Table, veritabanında dataların saklandığı alanlardır. Table’lar satır ve sütunlardan oluşmaktadır. Satır ve sütunların kesiştikleri alanlara da FİELD adı verilir.


 

2.2.6.      TABLESPACE:
 

            Tablespace, kullanıcıların sahip olduğu nesnelerin mantıksal olarak tutulduğu yerlerdir. Oracle kurulduğunda, standart olarak dört (4) tane tablespace oluşturulur.        
 

Sytem                      : Sistem nesnlerinin saklandığı alandır.

Temporar_Data        : Veritabanı parçalarının geçici olarak saklandığı yerdir.

Rollback_Data          : Her alanın  yedeklerinin saklandığı geri alma parçalarının bulunduğu yerdir.

User_Data                   : Kullanıcıların nesneleri için oluşturulan tablespace’dir.
 

2.2.7.      USER :
           
Oracle kuruduğunda, standart olarak 3 tane kullanıcı otomatik olarak oluşturulur. Bu kullanıcılar şunlardır:

SYS                 :  Sistem kullanıcısıdır. Standart olarak veritabanındaki bütün kullanıcılara ait bütün nesneleri kullanma hakkına sahiptir. Yani Oracle’ın en yetkili kullanıcısıdır. İlk şifresi :  change_on_install dır.

SYSTEM        :  Bu da SYS gibi bir sistem kullanıcısıdır. SYS’nin sahipolduğu bütün haklara sahiptir. İlk şifresi : manager dir.
 
SCOTT           :   Oracle ile birlikte gelen örnek nesnelerin sahibidir. İlk şifresi : tiger dir.

 

2.2.8.      VIEW ( GÖRÜNTÜ)
           
Görüntü (View), bir ya da birden fazla tablodaki bilgilerin sadece gösterildiği bir penceredir. View adından da anlaşılabileceği gibi tablodaki kayıtların aslı değildir, sadece o anlık bir gösterimdir. View ile ilgili olarak, veritabanında sadece görüntüyü oluşturan SQL cümlesi yer kaplamaktadır. View, tablolardan sadece sorgulama yapma imkanı (güvenlik açısından) sağlamaktadır.

2.2.9.      TETİKLEYİCİ ( TRIGGER )

           
Trigger’lar, bir tablo üzerinde gerçekleştirilen işlemlere bağlı olarak aktif hale gelen ve yapılan işleme bağlı olarak yeni bir işlem gerçekleştiren SQL ifadeleridir. Genel kullanım amaçları şunlardır :
 

Ø      Veritabanı üzerinde denetimi sağlamak,

Ø      Geçersiz işlemleri engellemek,

Ø      Sütün değerlerini otomatik olarak girilmesini sağlamak.

 

 

 

2.3.      SQL ( YAPISAL SORGULAMA DİLİ ) :

        
SQL, ilişkili veritabanındaki bilgileri sorgulamak için kullanılan dilidir. Başka bir deyişle SQL, bütün  kullanıcıların ve uygulamaların veritabanına erişmek için kullandıkları komutlar topluluğudur.
         SQL, temelde verilerle mantıksal seviyede çalışmaktadır. Yani bir tablodan kayıt seçebilmek için, o kayıtları seçecek bir şartın belirtilmesi gerekir. Şarta uyan bütün kayıtlar bir basamakta gelir ve bunlar ister kullanıcıya gösterilir, isterse başka bir uygulamaya yollanır.
SQL komutları ile  aşağıdaki işlemler gerçekleştirilebilir :

Ø      Veri sorgulama

Ø      Bir tabloya kayıt ekleme, değiştirme ve silme

Ø      Veritabanı nesneleri ( table, index, user, vb.) oluşturma, değiştirme ve silme

Ø      Veritabanı nesnelerine erişimi düzenleme.

 

 

2.4.      Veri Tipleri ( DATA TYPES ) :

        
Bir tablo, cluster, procedure veya funciton oluştururken her sütun veya argümanın bir tipi olması gerekir. Bu tip alana girilecek veriyi veya kullanılacak olan argümanı sınırlandırma işlemi yapar.

Veri tipleri şunlardır :
Char(sayi)           : Sabit uzunluktaki alfanümerik tipteki verilerin saklanabildiği alanları belirtmede kullanılır. Maxsimum 255 karakterdir. Eğer girilen veri sayi ile belirtilen uzunluktan kısa ise Oracle verinin sonuna boşluk karakteri koyarak veri uzunluğunu belirtilen uzunluğa eşitler.
Date                     : Tarih saklayan alanlar için kullanılır. Bu tipteki alanlarda, tarih ve saat bilgileri saklanabilir. Standart tarih formatı DD-MON-YY şeklindedir. Tarih  NLS_DATE_FORMAT ile tanımlanabilir.
Number(tam,ondalik) : Sayısal verilerin saklandığı alanlardır. Tam kısım için maximum değer 38 basamaktır. Ondalik kısmı için basamak sayısı –84 ile 127 arasında değişmektedir.
Long                    : 2 GB’ ta kadar karakter  tipinde veri saklanabilen alanlardır. Bir table da en fazla 1 tane Long tipinde alan olabilir. Long veri tipinde alanlar üzerinde aşağıdaki ifadeler kullanılamaz :
                ·
        Where

·        Group By

·        Order By

·        Distinct

·        Create Index

·        Create Table as Select

·        Substr, Instr fonksiyonları

·        SQL cümlelerin şart bölümlerinde long kullanılamaz.

 

Varchar2(sayi)    : Değişken uzunluktaki alfanümerik verilerin saklandığı alanlar içindir. Maximum 2000 karakter olabilir. Eğer sayi ile ifade edilen değerden daha kısa uzunlukta bir veri girilirse Oracle, verinin sonuna boşluk eklemez ve veriyi girilen büyüklükte saklar. Böylelikle yer tasarrufu gerçekleştirilebilir.

2.5.      Temel SQL Sorgulamaları :

SELECT =
Tablolardan belirtilen şarta uygun kayıtları ekrana getirilmesini sağlar.

Genel Yapısı :

SELECT [distinct] { sütun_adi1[alias],sütun_adi2[alias],...}
FROM table_name1,table_name2,...
WHERE {şart1[and | or] şart2,...}
ORDER BY {sütün_adi } [desc | asc ] ;

 

Ø      [ ]                     : Kullanılması isteğe bağlı olan ifadeleri belirtir.

Ø      { }                    : Kullanılması zorunlu olan ifadeleri belirtir.

Ø      |                       : Aynı anda sağdaki veya soldaki ifadelerden sadece biri kullanılabilir.

Ø      ...                     : Virgülden önceki ifadenin istendiği kadar tekrar edilebileceğini belirtir.

Ø      Alias                : Sütunların yeniden isimlendirilmesini sağlar.

Ø      Distinct           : Kayıtların yinelenmesini engellemek için kullanılan ifadedir.

Ø      From               : Sütunların seçileceği tabloların belirtildiği kısımdır.

Ø      Where             : Şartların yazıldığı bölümdür.

Ø      And/Or            : Where bölümünde, birden fazla şart yazıldığı zaman aralarındaki ilişkiyi belirtir.

Ø      ( )                     : Where bölümünde birden fazla şart yazıldığında, şartlar arasındaki önceliği belirtmek için kullanılır.

Ø      Order By        : Kayıtların sıralı bir şekilde görüntülenmesini sağlar.

Ø      Asc                  : Kayıtların sıralanması işlemini küçükten-büyüğe doğru yapar.

Ø      Desc                : Kayıtların sıralanması işlemini büyükten-küçüğe doğru yapar.

 

Örnek_1: Hangi serino ürünün kime ait olduğunu görüntüleyen select ifadesi.

                        select adi,soyadi,serino

from users u,envanter_user e

where e.kullanici=u.kod

order by adi asc;


Ekran Görüntüsü:

ADI              SOYADI       URUNNO

--------------- --------------- --------------------

nahit                 aytan           4

n                      a                  5

Ali                  Şentürk         1

Ali                 Şentürk         2

Ali                 Şentürk         3


 

Örnek_2:Envanter_User table ‘ında ki alanlara göre hangi kullanıcının hangi ürüne sahip olduğunu listeleyen select ifadesi:

                       

                        select u.adi,u.soyadi,eb.serino UrunNo,s.tanim UrunCinsi

from envanter_user e,users u,envanter_bilg eb,stok_tip s

where e.kullanici=u.kod and e.serino=eb.serino and eb.tipkodu=s.kod

order by adi asc;

 

                        Ekran Görüntüsü :
                       
                        ADI             SOYADI          URUNNO               URUNCINSI

--------------- --------------- -------------------- ------------------------------

Ali             Şentürk                    1                    Bilgisayar

Ali             Şentürk                    2                    Ekran Kartı

Ali             Şentürk                    3                    Bilgisayar

n                a                             5                    Bilgisayar

nahit          aytan                        4                    Bilgisayar

 

 

2.6.      SQL Karşılaştırma Operatörleri

Operatör                                                Anlam
<                                                            
Küçük
>                                                             Büyük
=                                                             Eşit
<=                                                           Küçük veya Eşit
>=                                                           Büyük veya Eşit
<>                                                           Farklı
!=                                                            Eşit Değil

 

2.7.      Veri Tipleri İçin Sorgulama

 

2.7.1. Nümerik ( Sayısal ) Veri Tipleri için Sorgulama

Select * from envanter_bilg
where tutar<1000;

 

2.7.2.      Alfanümerik ( Karakter ) Veri Tipleri için Sorgulama

Select * from users
where adi=’ali’;

 

2.7.3.      Tarih Veri Tipleri için Sorgulama

Select * from users
where credate<’12/06/2001’;

 

2.7.4.      Mantıksal ( Logical ) Veri Tipleri için Sorgulama

Select * from  deneme
where durum=.T.;


 

2.8.      Sorgulama Operatörleri ( In, Between, Like )

 

2.8.1.      IN        : SQL’lerde bir alanın değeri birden fazla verilirse, bu tip SQL’lerin WHERE bölümlerinde IN kullanımı kolaylık sağlar.

Select adi,soyadi,username from users
where adi in ('Ali','nahit');

ADI             SOYADI          USERNAME
--------------- --------------- -------------------
Ali                     Şentürk           ali
nahit                  aytan               nahit

 

2.8.2.      BETWEEN     :  envanter_bilg table’ına 15/06/2001 ile 25/06/2001 tarihleri arasında
                         gerçekleştirilen kayıt girişini listeleme.

Select serino,creuser KayıtYapan from envanter_bilg
where credate between ‘15/06/2001’ and ‘25/06/2001’;

SERINO               KAYITYAPAN
--------------------   -------------------
1                              ALI
2                              ALI
 

2.8.3.      LIKE               : usernameinde ‘a’ harfi geçen tüm kayıtları listeleme.

Select * from users
where username like 'a%';

KOD    ADI             SOYADI         USERNAME
------ --------------- ---------------       ---------
usr01  Ali                 Şentürk                 ali
usr05  Atakan          Akyüz                   atakan

 

2.9.      SQL’de Aritmetik Fonksiyonlar

 

2.9.1.      SUM Fonksiyonu       : Fonksiyona argüman olarak girilen field alanının değerlerini ilişkili olarak toplar.

Select sum(tutar) TOPLAMTUTAR from envanter_bilg;

TOPLAMTUTAR
-----------------------
3165

 

2.9.2.      AVG Fonksiyonu       : Argüman olarak belirtilen filed’aki değerlerin ortalamasını alır.

Select avg(tutar) ORTALAMATUTAR from envanter_bilg;

ORTALAMATUTAR
---------------------------
633

 

2.9.3.      MAX Fonksiyonu      : Argüman olarak belirtilen field’aki en büyük değeri bulur.

select max(tutar) from envanter_bilg;

MAX(TUTAR)
-------------------
1000

 

2.9.4.      MIN Fonksiyonu       : Argüman olarak belirtilen field’aki en küçük değeri bulur.
Select min(tutar) from envanter_bilg;

MIN(TUTAR)
-------------------
65

 

2.9.5.      COUNT Fonksiyonu : Table içinde herhangi bir sayma yaptırmak için kullanılır.
Select count(*) KayıtSayısı from envanter_user;
KAYITSAYISI
------------------
5

 

2.10.  Birden Fazla Sorgunun İlişkilendirilmesi

 

2.10.1.  Tablolar Arası Bağlantı(JOIN):

            İki veya daha fazla tablo arasında bağlantı (join) kurmak demek veritabanına tabloların hangi alanlarının birbirleri ile alakalı olduğunu göstermek demektir.
WHERE a.ILKODU=b.ILKODU
örneğinde seçim yapılan tabloların ilkodu alanlarının birbirleriyle bağlantılı olduğu anlatılmaktadır. Eğer bu bağlantı kurulmazsa sorgu sonucunda seçim listesine yazılan tabloların kayıt sayısının kartezyen çarpımı kadar kayıt gelir. Örneğin yukarıdaki bağlantı kurulmamış olsa idi listeye “a” tablosu ile “b” tablosunun kayıt sayısı çarpımı kadar kayıt listelenecekti. Yani “a” tablosundaki her kaydı “b” tablosundaki bütün kayıtlarla eşleştirme yaparak listeleyecektir.Tablolar arası bağlantıları ikiye ayıralibiliriz.


2.10.1.1. İçine Bağlantı ( Inner Join ) :

           
İçine bağlantılarda listeye sadece bağlantı kurulan alanları eşleşebilen kayıtlar gelir. İçine bağlantı, bağlantı kurulan alanlar arasına “=” işareti konarak yazılır. Şu ana kadar yaptığımız select ifadelerindeki bağlantı bu şekilde bağlantıydı.

Örneğin:
select kullanici from envanter_user,users
where  envanter_user.kullanici=users.kod;

Bu örnekte “envanter_user” tablosunda “kullanici” boş(null) olmayan ve de “kod” “users” tablosunda bulunan kayıtları listelenir.

KULLAN

----------

usr01

usr01

usr01

usr02

usr03


 

2.10.1.2.Dışına Bağlantı ( Outer Join ) :

             
Dışına bağlantılarda listeye tabloların birindeki tüm kayıtlar ve diğerinde ise bağlantıya karşılık gelen kayıtlar gelir.
              Dışına bağlantı, bağlantı kurulan alanlar arasına “=” işareti ve tüm kayıtların getirilmesi istenen tablonun karşı tarafındaki tabloya (+) konarak yapılır.Dışına bağlantı tabloların herhangi birindeki kayıtların tümü listelenmek istenddiğinde kurulur.

Örnek:

select adi,soyadi,e.serino UrunNo from users,envanter_user e
where users.kod=e.kullanici(+);


ADI             SOYADI          URUNNO
-----------     ---------------     ------------
Ali               Şentürk                  1
Ali               Şentürk                  2
Ali               Şentürk                  3
nahit            aytan                    4
n                  a                          5
a
atakan          akyüz
sercan          özer

Bu örnekte “users” tablosundaki tüm kayıtlar “envanter_user” tablosuyla eşleşme olsa da olmasa da listelenmiştir.

 

2.10.2.      İç İçe Select  Komutları

             
Bazı sorgulamalarda iç içe select ifadelerinin kullanılması gerekir. Bu tür durumlarda içteki select komutunun sonucu, dıştaki select komutunun işlevini yerine getirmesi için kullanılır.

Örnek: Envater_user da kayıdı olan kullanıcıların “users” taki kayıtlarını görüntülemek.

select * from users
where kod in (select kullanici from envanter_user);

KOD    ADI                  SOYADI             USERNAME        
------ --------------- ---------------   -------------
usr01  Ali                   Şentürk               ali     
usr02  nahit               aytan                  nahit   
usr03  n                    a                        nah