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.

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 : username’inde ‘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