Veri Tabani Programlama 1 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 64

Veritaban

ProgramIama
2
,a|+t z1
\aar 60l00l||
bu ok kcpy.|.r.n.., s.t.|.n.. |o. |.kk. s.k|.J..
b+|.r cku.|...r. uc.ots|. ..n.g.r.J..
2004 b+|
Y7 blr Acar ayincilik ayinidir
N0EKLEP
CP$..............................................................................8
8elli ba;li 7TYS'ler ............................................................. 8
8ir Proje in Hangi 7TYS'yi Seilmeli:...................................... 9
7eritabani Programlama2 Kitapigi Neleri eriyor..................... 10
Teknik 0estek ................................................................. 10
1.hS SL Server 2000'e giri ...........................12
Web Vatrix ve VS SQL Server 0esktop Engine............................ 12
A. VS0E'nin Kurulumu ve Kaldirilmasi .................................... 1J
Cereksinimler ................................................................. 1J
Kurulumu....................................................................... 1J
Kaldirilmasi .................................................................... 16
SL Server stemci Taraf iIeenIeri ..................................... 16
SQL Server Enterprice Vanager ............................................ 16
Enterprise Vanager'e 8ir SQLServer Kaydetme.......................... 17
Enterprise Vanager ile 7eritabani 8akim ve Yonetimi .................. 18
Enterprise Vanager ile Yeni bir 7eritabani 0lu;turmak................. 19
8ir 7eritabanini 0leklemek ................................................ 20
SQL Query Analyzer .......................................................... 21
Query Analyzer ile 7eritabani 0lu;turmak................................ 2J
Loglamadan Tablo 8o;altma: Truncate Table............................. 24
8ir Sorguyu Query Analyzer ile Analiz Etme .............................. 25
mport E Export 0ata ........................................................ 27
SQL Service Vanager ......................................................... 28
SL Server ve XhL 0estegi ................................................ 2
SL Server'de Veritabant NesneIeri ..................................... 2
SQL Server ve Kullanici Yonetimi........................................... JJ
Poller ........................................................................... JJ
Kullanicilar .................................................................... JJ
Yetki verme (Crant Komutu) ................................................ J4
Yetki Kaldirma (Pevoke Komutu) ........................................... J5
2.T-SL ve VTYS temeIIi programIama ...............36
TSQL ile ANSSQL komutlarini ali;tirma ................................ J7
0egi;ken Tanimlama ve Kullanma.......................................... J7
0egi;kenler ve Sistem Fonksiyonlari....................................... J8
Print komutu .................................................................. J9
Aki; Kontrolleri ............................................................... J9
Co Komutu..................................................................... 40
1.F ... ELSE karar yapisi .................................................... 40
2.CASE deyimi................................................................. 42
J.While 0ongusu.............................................................. 4J
Ceici Tablolar ................................................................ 45
Kontrol Zorlayicilari (Check Constraints) ................................. 46
3.SakIt ProsedrIer (Stored Procedures) .............48
Prosedur ne demektir: ....................................................... 48
SP olu;turma .................................................................. 48
SP ustunde degi;iklik yapmak .............................................. 49
8ir SP'yi Silmek ............................................................... 50
SP'ye Parametre Yollama.................................................... 50
Sp'den 0eger 0ondurme..................................................... 52
8u prosedurun dondurdugu sonucu nasil alabiliriz: ..................... 52
SP'yi 7TYS Uzayi 0i;indan V0ACs ile agirmak .......................... 54
Cursor'ler ...................................................................... 56
8a;lica Sistem Sakli Prosedurleri ........................................... 57
4.IemIer(Transactions) -TetikIer(Triggers) .........61
Transactions................................................................... 61
Trigger'lar ..................................................................... 62
EklenenSilinen Kayitlar ..................................................... 64
Dnsz
Veritabani kavraminin ilk olarak ortaya
atildigi 1-80`li yillarin ustunden henuz
! yil geti. Ancak bu gun, operasyonel
i dunyasi, Veritabani Ynetim Siste m-
leri (V1YS) olmadan hibir ey yap a-
maz hale geldi. Iletim sistemlerinden
sonra en populer ve en ok kazandiran
yazilimlar Veritabani Ynetim Siste m-
leridir.
Gunumuzde, bir ok alanda op e-
rasyonel veri ilemlerinde V1YS`ler
yaygin olarak kullanilmakta. Bu pro g-
ramlar iin bir ok nesne birbiri ile ayni
temel ilevi yerine getirir ve yaklaik
olarak ayni teorilere dayanarak aliir.
V1YS`lerinden orta ve buyuk lekli
olanlarindan biri olan MS SQL Server
!000 bu kitapikta teerruatli olarak ele
aliniyor.
MS SQL Server !000`i tanirken daha
ok V1YS`ler iin ortak olan noktalara
deginildi. Bylelikle kitapikta anl a-
tilan konular sadece MS SQL Server
kullanicilari iin degil, Sybase, Oracle
hatta Advantage (1urk programcilar
taraindan gelitirilmi bir V1YS. Bu
vesile ile projede emegi geenleri da
tebrik etmek gerekir.) iin bile bir ok
teknik olarak uygulanabilirlik seviy e-
SorumIu Yaz IIeri Mdr:
Murat ildiz
t,||J|,|,:eot:t
Ynetici ditr:
|brahlm zdemlr
|oJet|t,|,:eot:t
ditrIer:
8urak Kahyaoglu
|||,o|:,|,:eot:t
Usame |ldar zdemlr
:||Jt,|,:eot:t
7asarm ve UyguIama:
agiz Akay
,|,,|,:eot:t
ACAR Yaythctltk adtha lmflyaz sahlbl:
Murat YtIdtz
Rklam Muduru:
Ahmet AsIantrk
8askt:
TAM A.$.
Fllm tkt;:
Figr
Mrkz Os:
FuIya Cad. FuIya Baytrt 5k.
BiIsan PIaza 11I4 80300
Mecidiyeky - I5TANBUL
TeI: (212) 212 2 0
Faks: (212) 212 2 11
www.byte.com.tr
Veritaban ProgramIama 2 Y7 7
sinde yer almaktadir. Bu kapsamda,
hemen her V1YS`de ortak olarak yer
alan sakli prosedurler, trigger`ler, ku r-
srler, transaction`lar, zorlayicilar ve
diger nesneler yine sirayla bu kitapta ele
alinan konular arasinda.
Bu kitapikta genel olarak MS
SQLServer ve Sybas e`de kullanilan 1 -
SQL komutlari yer aliyor. Oracle tar a-
indan kullanilan PL/SQL komutlari
da aslinda 1-SQL ile bir ok noktada
hemen hemen aynidir. Bu nedenle
V1SY`ler iin bir noktaya kadar ortak
bir kitapik ortaya iktigini syleyebi -
liriz.
1um bunlarla birlikte son yillarda
populerlik kazanan V1YS uygulama
ekillerinden replication (ogaltmali
alima) ve Data Warehousing (Veri
ambarlama) konulari, kitapigin al a-
ninin kisitli olmasi nedeniyle yer veri -
lemeyen konular arasinda. XML veri -
tabanlari da yava yava populerleen
bir konu ama bu konu da bu kitapigin
ierigi diinda. Butun bunlar kitapikta
yer almamalarina ragmen veritabani
konusunda kendisini gelitirmek ist e-
yen arkadalara ikir vermesi aisindan
burada zikredilmitir. Ayrica veritabani
programlamadan ziyade ynetimi ile
daha ok ilgili olan, Kullanici Ynetimi,
Yedekleme-Kurtarma, D1S-BCP gibi
konulara da kisitli saya sayisi nedeniyle
deginilmedi.
Bata, gece gunduz demeden yogun
bir alimayla siz degerli okurlara bu
seriyi ulatirmak iin ugraan Ynetici
Editr Ibrahim Ozdemir ve ekibine,
Veritabani konusunda tecrubelerini
ekinmeden aktaran ve kitap iin
duzeltmeler yapan sayin Nurullah
Kili`a ve kitabin ierdigi rnekleri
test eden eim Lale Gzudeli`ye olmak
uzere kitapikta emegi geen he r-
kese sonsuz teekkurlerimi sunarim.
Bununla birlikte, seride yer alan butun
hatalar bana aittir.
-Yaar CDZUDLI
,o:Je||,|o:t||ot
8 Y7 Veritaban ProgramIama 2
V
eritabani Ynetim Sistemleri,
verilerin i ziksel haizadaki
durumlarini, kullanicilarin
eriimlerini duzenleyen sist emlerdir.
Ilikisel V1YS`ler gunumuzde y aygin
olarak kullanilmaktadir.
V1YS`ler i ziksel haizayi ve veri
tiplerini kullanicilar adina ekillendirip
denetleyen ve kullanicilarina st andart
bir S QL arayuzu s aglayarak onlarin
dosya yapilari, veri yapisi, iziksel haiza
gibi s orunlarla i lgilenmek y erine veri
giri-ikii i in uygun arayuzler gelitir-
melerine olanak s aglayan y azilimlardir.
V1YS`de verileri tut mak u zere bir ok
turde n esne ve bu n esnelere eriimleri
duzenlemek uzere kullanicilar, roller ve
gruplar yer alir. Her bir kullanicinin belli
haklari vardir. Bu haklar, kisitlanabilir.
Ornegin bir tablo ya da programcigi bir
kullanici kullanabilirken bir bakasinin
haklari veritabani y neticisi t araindan
kisitlanmi olabilir.
V1YS`lerin bir ogu ANSI S QL`in
karilayamadigi durumlarda kullanil-
mak u zere ek programlama komutlari
barindirirlar. Bu i i in MS SQL Server
ve Sybase S QL Server 1ransact S QL
denilen komut takimlarini ierir. Oracle
ise P L/SQL i le bu i e zum getirir.
Bu diller s ayesinde, bu konu i erisinde
grenecegimiz Stored P rocedure (s akli
prosedurler), 1 rigger, F onksiyon gibi
veritabanlari i in vazgeilmez olmu
nesneler yazilabilmektedir.
eIIi baIt VTYS'Ier
MS S QL Server: Bir orta ve buyuk
lekli V1YS`dir. ANSI SQL`e eklentiler
yazmak iin 1-SQL`i destekler.
OracIe: Daha ok yuksek lekli uy gu-
lamalarda t ercih edilen bir V1YS`dir.
ANSI S QL`e eklentiler y apmak i in
PL/SQL gelitirilmitir.
Sybase: Bir orta ve buyuk lekli
V1YS`dir. ANSI S QL`e eklentiler
yazmak iin 1-SQL komutlarini destek-
ler. lkemizde daha ok bankacilik ve
kamusal alanlarda tercih edilmektedir.
Informix: Bir orta ve buyuk lekli
V1YS`dir.
MySQL: Genellikle Unix-Linux temelli
Web uy gulamalarinda t ercih edilen
bir V1YS`dir. Aik kod bir y azilimdir.
Kuuk-orta leklidir. Ozellikle Web iin
gelitirilmi bir V1YS`dir denilebilir.
Postrage SQL: Bu da MySQL gibi aik
kod bir V1YS`dir.
MS Access: oklu kullanici destegi
yoktur. I letim sist eminin s agladigi
guvenlik s eeneklerini kullanir. Bunun
Ciri
Veritaban ProgramIama 2 Y7 9
yaninda belli s ayida kayda kadar
(1000000 civari) ya da belli bir boyutun
(yaklaik !MB) altina kadar bir s orun
ikartmadan kullanilabilecek bir kuuk
lekli V1YS`dir.
Advantage: 1u rk programcilar t arain-
dan gelitirilen bir orta ve buyuk lekli
V1YS`dir.
DB/2: I BM`in ramework`lere y nelik
buyuk lekli V1YS`dir.
Bunlarin diinda daha bir ok V1YS
mevcut olabilir. Burada y er alanlarina
populer olmalari nedeni ile deginildi.
V1YS`lerinin A vrupa genelindeki
pazar paylari yaklaik olarak u ekilde:
En buyuk pay I BM(DB/!) i le Oracle
arasinda. H emen arkasinda MS S QL
Server geliyor. In ormix ve Sybase is e
onu takip ediyor.
Yeni balayanlar i in hangi V1YS`yi
grenmem en iyisi olur sorusunu yanit-
lamak gerekebilir. lkemizde insan kay-
naklari aisindan en ok kaliiye elaman
aranan V1YS Oracle ve arkasindan da
MS S QL Server gelmekte. ok n adir
olarak Sybase bilen elemanlar da aran-
maktadir.
Bu konuda 1 BD(1urkiye Biliim
Vaki) y ayin organinda y ayinlanmi bir
aratirmaya gz atmak i in aagidaki
adresi tiklayabilirsiniz.
http:llwww.tbd.org.trlsayi77_htmI l
insan.htm
ir Proje in Hangi
VTYS'yi SemeIi!
Bir projede hangi veritabaninin s eile-
cegi, projenin api i le i lgili bir karardir.
u s orulari kendinize s ormaniz proje-
nizin api konusunda karar vermenize
yardimci olacaktir.
Projede ka tablo kullanacak
Her bir t abloda en azla ka s atir y er
alabilir
Projenize ayni anda en azla ka kulla-
nici baglanacak
Projeniz gunluk ka t ransaction
(INSER1-DELE1E-UPDA1E) ger-
ekletirecek
Projeniz en azla ne kadarlik yer kap-
layacak bir veritabani dosyasina i htiya
duyacak
Projeniz i in guvenlik n e derece
8V ....................... J7.8
0racle.................... 26.J
Vicrosoft ................ 15.4
nformix ................. J.2
Sybase ................... J
0igerleri ................. 14.J
2001 yilinda bir ara;t irmaya gore Avrupa
apinda 7TYS'lerinin pazar paylari
[kaynak: Cartner]
10 Y7 Veritaban ProgramIama 2
nemli Ancak bir V1YS kullanarak
proje gelitirecekseniz, hangisini seme-
niz gerektiginin diinda, hangi surumleri
kullanacaginiz ya da hangi donanimlar
ustunde alitiracaginiz da nemlidir.
Veritabant ProgramIama 2
Kitaptgt NeIeri eriyor
1.BIm: V eritabani Ynetim Sistem-
leri ele aliniyor. V1YS`ler, S QL`den
anlayabilen programlardir. V erdigimiz
SQL komutlarini y erine getiren, s ahne
arkasindaki i bitirici veritabani ynetim
sistemidir. V1YS`ler SQL i le i ade ede-
bildigimiz tum ilemleri yerine getirebi-
lirler. Bu blumde V1YS`ler hakkinda
detayli bilgi edinecegiz.
2.BIm: 1-SQL komutlari ele aniyor.
Bazen, SQL`de yer alan komutlar, derdi-
mizi anlatmamiz iin yeterli olmayabilir.
Bu tur durumlarda 1ransact SQL ieri-
sinde yer alan komutlardan aydalanaca-
giz. 1ransact SQL, kisaca 1-SQL olarak
anilir. Bu konudaki detayli bilgiyi i kini
unitede edinecegiz.
l.BIm: Stored Procedure ele aliniyor.
1-SQL ile Stored Procedure`ler yazmak,
V1YS`lerinin daha etkin bir ekilde kul-
lanilmasini s aglar ve eitli perormans
artirici etkileri vardir. Stored Procedure
ile, tekrar tekrar kullanmak uzere paket-
lenmi 1-SQL komutlari oluturacagiz.
Ayrica, SYBASE ve MSSQLServer
taraindan kullanilan ve sist emde hali
hazirda yer alan Stored Procedure`leri de
yakindan taniyacagiz.
1.BIm: 1ransaction`lar ve 1rigger`ler
ele aliniyor. 1-SQL i le Stored Procedu-
re`ler diinda 1 ransaction`lar ve 1 rig-
ger`ler de programlanabilir. 1ransaction,
Daha kuuk paralara ayrilamayan en
kuuk ilem birimi demektir. 1rigger`ler
ise Stored Procedure`lerin bir zel hali-
dir ve bir tabloda degiiklik yapildiginda
otomatik olarak devreye girerler. Zorlayi-
cilar ve SP`ler ile saglayamadigimiz veri
kararligini ve butunlugunu trigger`ler ile
saglamaya aliacagiz.
Teknik 0estek
Egitim serisi ile ilgili iletmek istediginiz
neri, ist ek, i kayet ya da duzeltmeleri-
nizi dogrudan BY1E 1urkiye dergisine
iletmek i in www.byte.com.trlbizeuIas.asp
adresini tiklayiniz.
Kitapik ve i erdigi konular hakkin-
daki her tu rlu s oru ve s orunlarinizla
ilgili olarak ygozudeIi@hotmaiI.com adre-
sine e-posta gndermekten ekinmeyin.
Yine Veritabani P rogramlama s erisi
hakkindaki gru, i kayet ve nerile-
riniz i in www.verivizyon.comlsqIkitabil
adresindeki ormdan aydalanabilirsi-
niz. Seri hakkindaki duyurulari da ayni
adresten takip edebilirsiniz.

12 Y7 Veritaban ProgramIama 2
V
1YS t emelli programlamayi
grenmek istiy orsaniz, ncelikle
bu unit ede anlatilan her eyi
anlamaya alimayiniz. !.niteyi ok iyi
etut ettikten s onra bu unit eyi daha iyi
anlayabilirsiniz.
Ancak SQL Server konusunda balan-
gi s eviyesinde bilginiz varsa, bu blum
ile onu daha etkili bir ekilde nasil kulla-
nacaginizi grenmi olacaksiniz.
MS SQL Server, orta ve buyuk lekli
V1YS`ler arasinda en y aygin olanlarin-
dan biridir. Bunun s onucu olarak da bir
ok veri ynlendirmeli Web sitesi bu gun
bu program ustunde ina edilmi durum-
dadir. Bu blumde MS SQLServer !000
Developer E dition(artik MSDE olarak
anilacak)`in kurulumu ve kaldirilmasi
anlatilacaktir. MSDE, E gitim ve kiisel
kullanim maksatli en geni S QL Server
!000 su rumudur. Bu blum boyunca
verilen uygulamalar SQL Server`in bah-
sedilen surumu ustunde test edilmitir.
hS0E'nin KuruIumu ve
KaIdtrtImast
hS SL Server
2000'e Ciri
VS0E a yrica V S SQL
Server 0eskto p E dition
iin de kullanilmaktadir.
0esktop E dition'da bir
istemci ara yuz bulun
mamakla birlikte SQL
Server kuru lumunu ger
ekle;tirebilirsiniz. 8u
programi ucretsiz olarak
www.microsoft.com a dre
sinden indirebilirsiniz.
0esktop Edition'i
kurmak iin, V S0E dizi
nindeki setu p.exe prog
ramini tiklayin.
Kurulum esnas inda
bir guvenlik sorunu
ile kar; ila;mamak iin
VS0E dizininde bulunan
setup.ini dosyasina ;u
iki satirin yer aldigindan
emin olun
[0ptions]
SAPW0=sasifresi
ve daha sonra
setup.exe programini
tiklayin. 8oylece, SQL
Server 0eskto p e dition
kuruldugunda sa ku lla
nici a dinda ve sas ifresi
;ifresinde te mel ver ita
bani ku llanicisini o lu;
turacak bir kuru lumu
ba;latmi; olursunuz.
VS SQL Server'in bu
surumu iin k isitli da
olsa bir ara yuz sa glaya
bilmek uzere u cretsiz
olarak Web Vatr ix prog
Web Vatrix ve VS SQL Server 0esktop Engine
Veritaban ProgramIama 2 Y7 13
SQL Server Developer Edition kuru -
lumu, kullanici ayarlarini saymazsak ve
sadece kendi bilgisayariniza kurmak veya
kaldirmak isterseniz, herhangi bir pro g-
ram kurulumundan arki yoktur.
CereksinimIer
Gerek hayatta veritabani uygulam a-
lari ciddi manada kaynak ihtiyaci olan
uygulamalardandir. Haiza buyuklugu,
ilemci hizi ve benzeri gibi sistem par a-
matrelerini, ustunde kurgulamayi plan -
ladiginiz projeye gre ekillendirmeniz
gerekir. Burada verilen gereksinimler
sadece grenme amali uygulamalarin
denenebilecegi bir sistem elde etmek iin
yeterlidir. MSDE kurulumu iin en azin-
dan bir Windows !000 Proessional veya
XP Proessional yuklu bir PC`ye ihtiyaci-
niz olacaktir. Donanimsal ihtiyaciniz ise
bu iletim sistemlerinin duydugu mini -
mum ihtiyalardir. Bu, butun programin
kurulumu iin geerli gereksinimdir.
Sadece istemci programlari kurup, hali
hazirda zaten olan bir MSDE sunucu -
sunu kontrol etmek isterseniz, Windows
-8 de yeterli olabilir. Ancak, buradaki
butun uygulamalari bir tek PC`de test
etmek istiyorsaniz, MSDE`nin tamamini
kurmaniz gerekir.
KuruIumu
Bu kisimda bir tek PC uzerine tum
MSDE`nin nasil kurulacagi anlatila cak-
tir.
ramini ku llanabilirsiniz.
Web matrix programini
www.asp.netlwebmatrix
adresinden u cretsiz
indirebilirsiniz. Ya da
V0ACs bile;enlerini ku l
lanarak kendiniz iin bir
arayuz haz irlayabilirsi
niz. 8unun bir benzerini
www.verivizyon.com
download a dresinden
indirebilirsiniz.
0esktop e dition
ustunde burada anlatilan
i;lemlerin bir ogunu
yapamazsiniz. Ya pa
bilmek iin en az indan
bu un itede an latilan
istemci programlarini da
kurmaniz gerekir. Ancak
sonuta u cretsiz bir V S
SQL Server suru munu
elde etmi; olursunuz.
8u iki yazilimin
birlikte ku llanimi konu
sunda daha geni; bilgiyi
A00.NET ile .NET temelli
veritabani u ygulamalari
geli;tirme ve We b Ser
visleri konu lu ser inin J .
kitabinda bulabilirsiniz.
14 Y7 Veritaban ProgramIama 2
1. Adim: IIS ve diger SQL Server`i kul-
lanacak s ervisleri durdurun. R egistry`e
eriecek gereksiz uy gulamalar varsa
kapatin.
2. Adim: Sikitirilmi paketi bir y ere
ain ve x 86\setup\setupsql.exe progra-
mini alitirin. {Resim 1)
l. Adim: Bu aamada programi nereye
kuracaginiz sorulmaktadir. Kendi maki-
nenize kuracaksaniz, Local Computer
seenegini i aretleyin. Uzaktaki bir bil-
gisayara baglanip o bilgisayara kurmak
isterseniz, R emote Computer s eene-
gin i aretleyebilirsiniz. Virtual Server
seenegi, Clustered Server kurmak i in
gerekli bir s eenek olup biraz i leri bir
konudur. Ozetle Clustered: Birden azla
SQL Server kurulu makinenin birbirinin
devami gibi i yuku ve traik dengeleme
ilemlerini yerine getirebilmesi amaciyla
kurulmasidir. {Resim 2)
1. Adim: I lk s eenek olan create n ew
instance o S QLServer s eenegini i a-
retli birakin. Daha nce bu programi
kurdunuz ve ustunde degiiklik yapmak
istiyorsaniz i kinci s eenegi i aretleye-
bilirsiniz. Inst ance, S QL Server`in bir
tek makinede i ki ayri u zayda alimak
uzere y eniden kurulmasini kasteder.
Bu durumda i kinci Inst ance(kopya)`ya
MAKINEADI/INS1ANCEADI n otas-
yonu i le eriilir. Bir makinede birden
azla kopya alima zelligi t am olarak
MSSQL Server !000 su rumunde mev-
cuttur. 6,0 su rumunde is e bu konuda
hibir destek yer almaz. Ayni makinede
ne azla 16 kopya aliabilmektedir.
5. Adim: A dinizi ve i rmanizi giriniz.
{Resim l)
6. Adim: Szlemeyi onaylamak i in
yes{ botununu tiklayin.
7. Adim: Server and client t ools s ee-
negini i aretli birakin. Server olarak
SQL Server daha nce kurulu is e veya
bulundugunuz ag ortaminda baka bir
bilgisayarda kurulu is e i lk s eenegi de

Veritaban ProgramIama 2 Y7 15
iaretleyebilirsiniz.
8. Adim: S QL Server y apilandirma
konusunda t ecrubeli degilseniz, bu
adimda deault s eenegini i aretli bira-
kin. Bir makinede, birden azla S QL
Server kurulumu alitirabilirsiniz. Bu
durumda her bir kurulum arkli bir
uzayda aliacaktir. Ayni is mi i ki S QL
Server kurulumuna veremezsiniz.
{Resim 1)
9. Adim: K ariniza ikan pencereden,
1ypical s eenegini i aretli birakin. SQL
Server bileenleri hakkinda y eterli
bilginiz varsa, Costum s eenegini,
sistem kaynaklarinizin kisitli oldugunu
duunuyorsaniz, minimum s eenegini
kullanin. S QL Server`in programi
arkli bir diske kurmasini istiy orsaniz,
program i les s eeneginin nundeki
browse{ butonunu ti klayin ve kurmak
istediginiz klasru setikten sonra ok{`i
tiklayin. SQL Server`in veri dosyalarini-
(veritabani dosyalarini) arkli bir adreste
saklamasini istiyorsaniz, data i les s ee-
neginin karisinda y er alan browse{
butonunu ti klayin ve ayni i lemi yapin.
Windows konusunda y eterli bilginiz
yoksa, bu kisimla da oynamamaniz
tavsiye edilir.
10. Adim: Gelen s eenekleri aynen
onaylayin. SQL Server ve Active Direc-
tory konusunda bilgi s ahibi is eniz bu
konudaki ayarlari uy gun hale getirebi-
lirsiniz.
11. Adim: SQL Server, iki eit yetkilen-
dirmeyi destekleyebilir.
a. I letim sist emi ve domain ayarla-
rindan gelen y etkilendirmeleri geerli
kabul eder ve SQL Server kaynaklarina
eriimini geerli kabul edebilir.(Bu
durumda, sist em y etkilendirmesi olan
kii dbo(veritabani s ahibi) kullanicisi
olarak yetkilendirilir.)
b. Sistem y etkilendirmelerinin y ani
sira S QLServer`in kendi kullanicilarini
da oluturup yetkilendirmesini ist eyebi-
liriz. Bu durumda veritabani kaynakla-
rina eriim iin iki yetkilendirmeden biri

16 Y7 Veritaban ProgramIama 2
taraindan yetkilendirilmi bir kullanici-
nin eriimi geerli sayilir.
Uygun olan s eenegi i aretleyin.
ayet kendiniz S QL Server i in bir
kullanici oluturursaniz, bu kullanicinin
kullanici adini(muhtemelen bu isi m s a
olacak) ve i resini unut mayacaginiz
bir ekilde guvenli bir yerlere kaydedin.
Daha sonra gerekli olacaktir. Ancak a`ya
gre bir y etkilendirme t ercih ederseniz,
iletim sistemi irenizi korumaniz gere-
kecektir.
12. Adim Next{ butonunu ti klayarak
dosyalarin kurulumunu s aglayin. Dos-
yalarin kopyalanmasi bittiginde Finish{
butonunu ti klayin. Bylelikle kurulum
tamamlanmi olur.
KaIdtrtImast
MSDE`yi ya da SQL Server`i kaldirmaya
karar vermeden nce, ustunde aliacak
projelerinizin olmadigindan emin olma-
niz gerekir. Aksi halde kaldirildiktan
sonra MSDE`yi kullanan projeleriniz
aliamayacaktir.
1. SQL Server`i kullanmakta olan butun
servisleri durdurun.
2. SQL Server hizmetini durdurun. Aik
olan tum SQL server toollarini kapatin
l. Denetim masasi\program ekle kal-
dir`dan S QL Server !000{`i s ein ve
normal bir program kaldirir gibi kaldi-
rin.
SL Server stemci Taraf
iIeenIeri
SL Server Enterprise
hanager:
Enterprise manager, S QL Server`in
grsel bir arayuzden y netilmesi i in
gelitirilmi bir ist emci t ara parasidir.
Kullandigi t emel arayuz MMC ( Micro-
sot Management Console) t emelli bir
arayuzdur. Bu konuda, MMC`nin nasil
kullanildigi anlatilmayacaktir. Sadece
yapilabilecekler hakkinda zet bilgiler
bulabilirsiniz.
Enterprise manager ile ayni zamanda
birden azla veritabani sunu cusuna
baglanilabilir. Bu i lem i in veritabani
sunucularinin (S QL Server) kaydinin
yapilmasi gerekir. Kaydin y apilabilmesi
iin de y etkilendirilmi bir kullanici i le
eriim arttir.
Bir veritabani sunu cusuna eritikten
sonra, ustunde yer alan kullanicilari, yet-
kimiz olan veritabani dosyalarini, stored
procedure, view, t ablo gibi veritabani
gelerini grebiliriz.
Yetkimiz dahilinde degiiklerde bulu-
nabiliriz.
SQL server gruplari tanimlanabilir
Her bir grup ierisinde yer alacak tekil
SQL Server`ler kaydedilebilir.
Kaydi yapilan her bir SQL server i in
istenilen ayar ve degiiklikler yapilabilir.
Herhangi bir S QL Server ustun de
veritabanlari, n esneler, kullanicilar,
yetkilendirmeler ve i zinler oluturulup
duzenlenebilir.
Veritaban ProgramIama 2 Y7 17
Yetki erevesinde, kaydedilmi S QL
Server`ler ustunde SQL Server ynetim
grevleri alitirilabilir, tanimlanabilir.
SQL i adelerinin, yi ginlarinin ve
scriptlerinin alitirilmasi i in gereken
yerden Query Analyzer`e gei saglar.
Veri it hal-ihra etme i lemleri bata
olmak uzere bir ok ilem iin kolaylati-
rici sihirbazlarin balangi noktasidir.
MMC, Microsot`un sunu cu uy gu-
lamalarini y netmek i in gelitirdigi bir
genel arayuzdur. Bu n edenle bir ok
sunucu uy gulamada bu st andart arayuz
ile kullanicilarin sunucu uygulamalarini
ynetmeleri s aglanmitir. (II S de bu
turden bir y netim paneli kullanici ara-
yuzune s ahiptir). H er bir uy gulamanin
kendisi iin bir bileen yuklenir ve arayuz
bu bileen s ayesinde o uy gulamanin
zelliklerini y netecek bir hal alir. S QL
Server`in de byle bir eklentisi mevcuttur.
Bu eklenti i le MCC`nin birlikte olutur-
dugu y netim programinin adi da S QL
Enterprise Manager olarak anilmaktadir.
{Resim 5)
SQL Enterprise Manager`i balatmak
iin (t abi ncelikle MSDE`yi kurdugu-
nuzu var s ayiyoruz.) yukaridaki ekilde
gruldugu gibi Balar>Programla-
r>SQL Server>Enterprise Manager`i
tiklamak yeterli olacaktir.
Enterprise Manager`i alitirmak t ek
baina hibir anlam iade etmez. Hangi
veritabanini y netmek istiy orsaniz o
sunucuyu (y a da veritabani kurulum
kopyasi - installation instance`) kaydet-
tirmeniz gerekir.
Enterprise hanager'e ir
SLServer Kaydt EkIemek:
Herhangi bir S QL Server`i Ent erprise
Manager ile ynetebilmek iin kaydettir-
mek gerektigini biliyoruz. Bu ilem iin
u aamalar takip edilir:
1. Bu i lem i in ncelikle Ent erprise
Manager bir nceki konuda anlatildigi
ekilde balatmak gerekir.
2. Ardindan, Microsot S QL Serve-
r>SQL Server Group aga y apilarini
sirayla tiklayarak ain.
l. SQL Server Group seenegini, are ile
sol ti klayin. Ardindan ailan menuden
New S QL Server R egistration s eene-
gini tiklayin.
1. Register SQL Server Wizard balatila-
caktir. Next{ butonunu tiklayin.
5. Agda geerli SQL Server`lerin bir lis-
tesi sol t arata belirecektir. Kendi maki-
nenizdeki SQL kopyasini normal olarak
kurduysaniz, ( local) eklinde gsterili-
yordur. Uygun sunucuyu setikten sonra
Add >{ butonunu tiklayin ve ardindan
Next{`i tiklayin.
6. Hangi y etkilendirme s eenegini kul-
lanacaginiz belirleyin. Bunu, agda daha
nceden kurulmu bir SQL Server i in
Pesim 5
18 Y7 Veritaban ProgramIama 2
yapacaksaniz, V eritabani Yneticisine
danimaniz daha iyi olacaktir. K endi
kurdugunuz S QL Server`e baglana-
caksaniz, kurulum aamasinda hangi
yetkilendirmeyi s etiginizi hatirlayin ve
ayni s eenegi burada da s eip Next{`i
tiklayin. {Resim 6)
7. Hangi SQL Server Goup`a ekleyece-
ginize karar verin ve iaretleyin. Ilk dea
kullaniyorsaniz, st andart ayarlari t akip
etmeniz nerilir. Next{`i tiklayin.
8. Uygun sunu cuyu s ein ve Next{`i
tiklayin.
9. Kayit ilemi burada sona erdi. Baarili
bir ekilde ekleme ilemini yerine getir-
diniz ise resim 7`deki gibi bir ekran elde
edeceksinizdir. {Resim 7)
SQL Server kaydini kaldirmak
olduka kolaydir:
1. K aydini kaldirmak ist ediginiz S QL
Server`i areniz i le s ol ti klayin. {Resim
8)
2. Gelen dogrulatma mesaj kutusunda
yes{` i tiklayin.
Enterprise hanager iIe
Veritabant aktm ve Yonetimi
Herhangi bir V1YS`de oldugu gibi
SQLServer`de de asil verilerin tutu l-
dugu yer veritabanidir. Bir veritabani bir
ok n esne ve verilerle birlikte kullanici
tanimlari ve haklar gibi rolleri de i erir.
{Resim 9)
SQL Server !000`de verilerin ve
tanimlamalarin yer aldigi bir veritabani
dosyasinin y ani si ra bir de log dosyasi
yer alir. Veritabani dosyasi `.md uzan-
tilidir. Log dosyasi is e `.ld uzantili bir
Pesim 6 Pesim 7
PUCU:
8ir SQL Server ka yit bilgisi s ilin
diginde SQL Server'de yer a lan
bilgiler kaybolmaz, silinmez sadece
sizin Enterprice Vanager'iniz kaydi
silinen SQL Server'i tekrar ka ydet
mediginiz surece yonetemez.
Veritaban ProgramIama 2 Y7 19
dosyadir.
Bu tu r veritabani dosyalarina ait
bilgileri grmek i in Ent erprise Mana-
ger`de herhangi bir veritabani dosyasini
sol ti klayin ve ikan menuden properti-
es`i tiklayarak detay bilgilerine eriebilir,
bir kisim degerleri degitirebilirsiniz.
1ransaction log dosyalari aslinda i lk
bakita pek de nemli bir dosya degil
gibi grunur. Ama aslinda bir ok bilgi
ilem en kara gunlerden bu loglar saye-
sinde kurtulur. 1ransaction log dosyalari,
SQL Server`da verilerin depolanmasi ve
kurtarilmasi durumunda olduka buyuk
nem arzetmektedir. Bir t ablonun i er-
digi verilerde y apilan degiiklikler nce
transaction log dosyasina y azilir, ardin-
dan veritabanina kaydedilir. Bu sist em
bata veritabanina y apilan kayit i le-
minin tut arliligini s aglamak i in byle
gelitirilmitir ve hemen her V1YS`de
ayni ekilde aliir.
SQL Server`da I NSER1, UPDA1E
veya DELE1E komutlari alitirildi-
ginda oluan degiiklikler t ransaction
log dosyasina ilenir.
Veritabani y netimi, veritabani dos-
yalarinin duzenlenmesi, oluturulmasi
ve si linmesi i lemlerinden i barettir.
Bir S QL Server`deki en y etkili st an-
dart kullanici s a(system admin-sistem
yneticisi) kullanicisidir. Bir veritabani
dosyasindaki en yetkili st andart rol dbo
(database owner - veritabani sahibidir)
Enterprise hanager iIe Yeni
bir Veritabant DIuturmak
Enterprise Manager ile bir ok ilem gibi
veritabani oluturma ii de grsel bir
arayuzden gerekletirilebilir. Bu i lem
iin, ncelikle Ent erprise Manager`e
girin. Ardindan Databases uzerinde sag
tiklayarak New Database s ein. Sizden
veritabani adi girmeniz istenecektir. Iste-
diginiz bir veritabani adini girin.
Bir veritabani t animlanma aama-
sinda y a da t animlandiktan s onra u
parametrelerini de leklemek gerekir.
Oleklemek`ten kasit projenin buyuklu-
Pesim 8 Pesim
20 Y7 Veritaban ProgramIama 2
gune gre perormans-kapasite denge-
sini oturtmaktir. Bu biraz da veritabani
konusunda tecrubeli olmanizi gerektiren
bir ilemdir.
ir Veritabantnt
DIekIemek
Enterprise manager ile bir veritabaninin
zelliklerini grmek i in ncelikle o
veritabanina dosyasi s eilir. Daha s onra
bu veritabaninin ustunde sag tik yapilir.
Ardindan properties s eenegi ti klanir.
Ardindan options s ekmesi ti klanarak
ustunde degiiklikler yapilir.
Veritabaninin b oyutu: V eritabanina
kayit girdike y a da y eni t animlamalar
- n esneler girdike boyutu buyur. Bir
azami boyut t animlanmasi halinde bu
degere ikilmasindan itibaren depolama
biriminde (harddisk) yer gerektiren veri-
tabani ilemleri yapilamaz.
Transaction I og dosyasi azami boyutu:
Bir veritabaninda y apilan kayit ekleme,
kayit si lme ve kayit guncelleme i lem-
lerinin veritabani log dosyasinda i aret-
lendigini biliyoruz. Bu dosya ustunden
veritabaninin butunlugunun s aglandi-
gina da deginmitik. It e bu dosya da
belirtilen azami boyutun ustune ikarsa
UPDA1E-INSER1-DELE1E ilemleri
gerekletirilemeyecektir. 1 ransaction
Log`a i aretlenmesi gereken hibir ey
alitirilamayacaktir. Bu tur durumlarda
bir alternati olarak artik iinize yarama-
yacagini duundugunuz t ransaction log
kayitlarini truncate edebilirsiniz (si lebi-
lirsiniz).
Database SeenekIeri: Veritabani s ee-
nekleri, veritabanin leklenmesinde
etkili bir diger aktrdur. Bu s eenekler
kisaca:
Autoshrink: V eritabaninin otomatik
olarak kuultulmesini ayarlayan zellik-
tir. Bu zellik seili iken veritabani dos-
yasi ve log dosyasi belli araliklarla sistem
taraindan otomatik olarak gereksiz
alanlari dosyadan ikarilmaya zorlanir.
dbo use onIy: Bu zellik s eildigi
anda sist emde login olan kullanicilar
ve db_owner s abit sist em rolune haiz
kullanicilar diinda diger kullanicilar
bu veritabani dosyasini kullanamazlar.
Halihazirda sist eme login olan kulla-
nicilar is e sist emden ikmalari halinde
db_owner rolune haiz degil is e t ekrar-
dan veritabanina eriemezler.
read onIy: Veritabani dosyasinin s adece
okunabilir olmasini saglayan seenektir.
Bu s eenek s eildiginde kullanicilar
veritabanindan veri okuma ( SELEC1)
komutlarini alitirabilir ancak
DELE1E, UPDA1E, I NSER1 gibi
DML komutlari i le AL1ER, CREA1E
ve DROP gibi DDL komutlarini ali-
tiramaz.
singIe user: V eritabani dosyasini ayni
Veritaban ProgramIama 2 Y7 21
anda bir t ek kiinin kullanmasini
saglar. Bu komut alitirildigi anda
veritabaninda birden azla kii bagliysa
bu zellik aildiktan s onra kullanmaya
devam ederler ancak baglanti kesildigi
andan iti baren bir t ek kullanici kurali
dikkate alinir.
Kurtarma ModeIi SeenekIeri: Verita-
bani leklemede bir diger s eenek de
veri kurtarma modelidir. Bu i lem i in
olan seenekler de aagidaki ekildedir.
1. FuII R ecovery ModeI: Bu s eenekte
veritabani ustun de y apilan i lemlerin
loglari tutu lur. Bir veri kurtarma i le-
minde, log dosyalari i le birlikte verita-
bani kayitlari da elde edildikten s onra
veritabani kurtarma ilemi gerekletiri-
lebilir. Standart olan kurtarma s eenegi
bu seenektir.
2. BuIk_Logged R ecovery ModeI: Full
Recovery Model i le y aklaik ayni s ee-
nekleri kullanir. F arkli olarak t oplu
ilemler i in daha az log tut ar. Ornegin
SELEC1 I N1O vb. gibi komutlar i in
daha kisitli bir log tutulur.
l. SimpIe R ecovery ModeI: En basit
transaction log tutma seenegidir. Daha
ok kuuk lekli ve deneme amali veri-
tabanlarinda veya sadece okuma amali
kullanilan veritabani dosyalari i in
kullanilir. Bunun diinda ti cari amali
veritabani uy gulamalarinda bu tu rden
bir kurtarma modelinin s eilmemesi
gerekir.
SL uery AnaIyzer
Query Analyzer, SQL ve 1-SQL temelli
komutlarla V eritabani Sunucularinin
konigure edilmesini s aglamanin y ani
sira SQL iadelerini alitirma ve analiz
etme konusunda aydalanilmak u zere
gelitirilmi bir SQL Server bileenidir.
Yine Query Analyzer i le bir veritaba-
nina eriebilmek iin yetkilendirilmi bir
iletim sist emi kullanicisi veya domain
kullanicisi y ahut veritabani sunu cusu
yneticisi hesabina s ahip olmak gerekir.
Bu kullanici grubunun hangisi veya
hangilerinin geerli olacagi, Ent erprise
Manager i le bir veritabanina s a (sist em
yneticisi) veya edegeri bir hesap i le
baglandiktan s onra properties\Security{
sekmesinden duzenlenebilir. Yin e n es-
neler i in y etkiler Ent erprise Manager
sayesinde duzenlenebilir.
Bir s onraki unit ede anlatilan 1-SQL
PUCU:
Query Analyzer'i Enter price Vana
ger'den agirmak mumkundur.
8unun en buyuk fa ydasi yetkilen
dirme bilgilerini yeniden girmemize
gerek ka lmamasidir. 8u i;lem iin
Enterprice Vanager'dan baglanmak
istediginiz ver itabanini se tikten
sonra [Tools\SQL Quer y Analyzer]'i
tiklamak yeterlidir.
22 Y7 Veritaban ProgramIama 2
komutlari ve Sakli P rosedur, 1 rigger,
Cursor gibi veritabanin n esnelerinin
oluturulmasi esnasinda Query Analyzer
programi kullanilacaktir.
SL Server uery AnaIyzer'in
beIIi baIt ozeIIikIeri:
1-SQL i adelerini alitirmak i in bir
metin editru
ANSI-SQL ve 1 -SQL i in Sentaks
boyama
Nesne gezgini ve nesne arama s ee-
nekleri i le bir veritabanini veya ustunde
yer alan nesnelere eriim kolayligi.
1ablo oluturmak gibi bir ok ilem iin
kullanilabilir hazir 1-SQL ablonlari.
Bir etkileimli hata ayiklayici i le Sakli
yordamlar iin analiz imkani.
Resultset`leri metin (text) t emelli veya
izgara (grid) temelli sunabilme.
Graik ve metin t emelli Sorgu ali-
Pesim 10. (1) Query Anclyzer'de TSQL komutlcrinin yczildiyi soryu penceres. (2) Sonu
cun ne olcrck yrnmesn stedynz bu menden belrleyn. (3) Soryunuzdc br sen
tcks hctcsi olup olmcdiyini denetlemek n bu kismi kullcncblrsnz. (4) Soryunuzu
cli;tirmck n bu kismi kullcnin.(F5 tu;unc dc bcscblrsnz.) (5) Hcny vertcbcnindc
cli;tiyinizi burcdcn yrp dey;treblrsnz. (6) (cli;tirmc plcnini yrmek n burcyi
tiklcyin. (7) Nesneler yrmek n kullcnilcn men ve nesneler. (8) Soryulcrin sonu
ekrcni. () $cblonlcrc er;mek n bu meny kullcnin.
Veritaban ProgramIama 2 Y7 23
tirma plani i le Query analiz etme s ee-
negi ile daha az kaynak tuketen sorgula-
malar gelitirme imkani
8. In dex ayarlama si hirbazi i le 1 -SQL
komutlarini analiz ederek daha iyi s orgu
perormansi iin bir tablo ustunde ek bir
index alana gerek olup olmadigini bula-
bilme.(Indeksler hakkinda geni bilgi iin
serinin ilk kitabina bakiniz.)
{Resim 10)
uery AnaIyzer iIe
Veritabant DIuturmak:
Create 0atabase
Enterprise manager i le grsel ortamda
yaptigimiz hemen her eyi Query Analy-
zer i le de y apmak mumkundur. H atta
bu ortamda dogrudan kodlarla muhatap
oldugumuz i in daha azla detaya huk-
metme ansina sahibiz. Bu kisimda, bir
nceki blumde Ent erprise manager i le
nasil yapilacagini anlattigimiz veritabani
oluturma iini 1 -SQL komutlarini
kullanarak nasil yapabilecegimize degi-
necegiz. Bu i lem i in kullanacagimiz
komutu, Create Database deyimini bir
nceki kitapikta zet olarak anlatmi-
tik.
Genel kullanimi u ekildedir:

CREATE DATABASE veritabani_adi
[ON
[PRIMARY] (NAME= veri_dosyasi_adi,
FILENAME= ziksel_veri_dosyasi_adi
[, SIZE = veri_dosyasi_boyutu ]
[, MAXSIZE= maksimum_veri_dosyasi_
boyutu ]
[, FILEGROWTH=veri_artim_miktari])
[LOG ON
(NAME= log_dosyasi_adi,
FILENAME= ziksel_log_dosyasi_adi
[, SIZE = log_dosyasi_boyut]
[, MAXSIZE= maksimum_veri_dosyasi_
boyutu ]
[, FILEGROWTH=veri_artim_miktari]
)
]
PRIMARY: Bazen veritabani t anim-
lanirken birden azla dosya ustun de
veri s aklayabilecek bir ekilde t anim-
lanabilir. Bu durumda birinci dosya
PRIMARY i le belirtilen dosyadir. Bir
dosya bir ana gruba s ahip olabilir.
PRIMARY deyimi kullanilmazsa bir
veritabani i in t animlanan i lk dosya
PRIMARY dosya olarak kabul edilir.
Butun veritabani tanimlama tablolari ve
degerleri birincil dosyada saklanir. Birin-
cil veri dosyasi `.md ` dir. I kincil veri
PUCU:
7eritabaninda, ku llanici bilgileri,
haklar, nesne ler ve oze llikleri gibi
bilgilerin tutu ldugu ver i ta blolari
iin birok literaturde 7eri Sozlugu
(0ata 0 ictionary) ter imi ku llanilir.
7eritabani o lu;turuldugunda bir
ok verinin yer aldigi bir ok tablo
sistem taraf indan o lu;turulur ve
sistemin kendi ihtiyaci olan bilgiler
tutulur. 8ir de proje taraf indan
referans alinan ve il listesi, tur kod
lari ve benzeri gibi sa bit ka yitlari
ieren tablolar var dir ki bu tur den
tablolara da lookup table(referans
tablosu) denir.
24 Y7 Veritaban ProgramIama 2
dosyalarinin uzantisi ise `.nd ` dir.
veritabani_adi: V eritabanina vermeyi
planladiginiz isi m. Bu isi m V1YS t ara-
indan geerli kabul edilen ve 1-SQL ile
gnderimde bulunmak ist ediginiz (i leri
seviyeli ilemlerde) isim.
veri_dosyasi_adi: Veritabaninin i ziksel
adi. Bu isi m i letim sist emi t araindan
bilinene ismidir.
fizikseI_veri_dosyasi_adi: I letim sis -
temi uzerinde saklanacak dosyanin adini
ve yolunu belirtir.
veri_dosyasi_boyut: Veri dosyasinin MB
cinsinden boyutunu belirtir. En az ve
standart deger 1MB`tir. Bir birim belir-
tilmezse MB olarak alinir ancak diger
haiza birimlerini de belirterek kullan-
mak mumkundur. GB, MB, KB gibi.
maksimum_veri_dosyasi_boyutu: Bu
veritabaninin n e kadar boyut i le sini r-
landirilacagini belirtir. ayet bir deger
girilmezse, tu m disk doluncaya kadar
veritabani dosyasina veri eklenebilir.
artim_miktari: Veritabaninin balangita
belirtilen boyutu doldugunda sist em
taraindan boyutu otomatik olarak arti-
rilir. Bu aamada veritabaninin boyunun
ne kadar artirilacagi bu parametre i le
belirtilir. / oran degeri verilebilecegi gibi
sabit bir artim boyutu da girilebilir.
rnek 1:
Bir nceki kitapikta da kullandigimiz
dbKutuphane veritabanini oluturalim:
Balangi boyutu 1MB olsun. En azla
1GBa kadar olmak uzere her s eerinde
veri dosyasi / !0`si kadar artirilmak
uzere en azla 1GB`a kadar ikarila-
bilsin. Veri dosyalari i in isi m kutup-
hane_data olsun ve iziksel dosya adi D:
\data\dbKutuphane.md ` olsun.
Loglar i in balangita s adece 1 MB
yer ayrilsin. Ancak bu alan dolarsa, her
seerinde 1MB olmak u zere en azla
1GB`a kadar sist em t araindan ikari-
labilisin. Loglar i in sist em dosya adi
kutuphane_log olsun ve i ziksel dosya
adi D:\data\dbKutuphane.ld ` olsun.
CREATE DATABASE dbKutuphane
ON PRIMARY
(NAME =kutuphane_data,
FILENAME= `D:\data\dbKutuphane.mdf',
SIZE = 1,
MAXSIZE = 1GB,
FILEGROWTH = 20%
)
LOG ON(
NAME = kutuphane_log,
FILENAME= `D:\data\dbKutuphane.ldf',
SIZE = 1MB,
MAXSIZE = 1GB,
FILEGROWTH = 1MB
)
LogIamadan TabIo oaItma:
Truncate TabIe
Bir tabloda yer alan tum kayitlari silmek
ama bu silme ilemleri iin de satir bazli
birer t ransaction log oluturulmasinin
istenmedigi durumlar olabilir. (Ozellikle
replication i le i lgili uygulamalarda). Bu
tur durumlarda 1R UNCA1E 1ABLE
komutu kullanilir.
Veritaban ProgramIama 2 Y7 25
Genel kullanimi u ekildedir:
TRUNCATE TABLE tablo_adi
Burada, tablo_adi argumani, Ierigini
satir satir loglamaksizin boaltacagimiz
tablo adini iade eder.
1RUNCA1E 1ABLE i le WHERE
cumlecigi olmayan DELE1E komutu
ayni ilevi yapar, bir tablonun tum satir-
larini boaltir. 1R UNCA1E 1 ABLE
komutunu, WHERE koulu olmayan
DELE1E cumlelerinin y erine kul-
lanmak daha hizli bir t ablo boaltma
yntemidir. Sistem kaynaklarini da
1RUNCA1E komutu daha az megul
eder. unku, her bir silinen satir iin log
oluturmasinda gerek yoktur.
1RUNCA1E 1 ABLE komutunun
neticesinde, t ablonun s adece i erdigi
veriler si linir. K olonlar, zorlayicilar,
indeksler, t rigger`ler ve benzeri diger
tablo ustun de y er alan t animlamalar
silinmez. Bu tu r t animlamalarin da
silinmesini istiyorsaniz, DROP 1ABLE
komutu ile tabloyu silmek gerekir.
rnek 2:
DELETE * FROM kitap
ile
TRUNCATE TABLE kitap
Komutlarinin herhangi biri aliti-
rilsa i di, daha sonra eklenecek bir kitap
iin sist em t araindan verilen kitap-
No(kitap t ablosunun otomatik artan
anahtar alani) alani degeri arasinda n e
ark olurdu
1. i lemden s onra, kitapNo alanina en
son verilen kitapNo degerinin bir azla-
si(bir sonraki daha dogru olur.) verilirdi.
2. ilemde ise kitap no tekrardan 1 dege-
rinden(ilk verilen degerden) balar ve
eklenen her kayit i in artmaya devam
eder.
1RUNCA1E 1 ABLE komutu,
yabanci anahtar zorlayicilarina t akilir.
Bunun anlami u dur, dun t ablo-
sunda, kitapNo y abanci anahtar olarak
tanimlandigi iin, kitap tablosu ustunde
1RUNCA1E komutu alitirildiginda,
komut alitirilmayacaktir. Aksine
DELETE * FROM kitap
alitirilir. unku DELE1E komutu
log tut ar ve bu nedenle bir 1RI GGER
tetikleyebilir. Ancak 1R UNCA1E
komutu log tut madigi i in t rigger
harekete geiremeyecegi nlem olarak
komut alitirilmaz.
1RUNCA1E 1 ABLE komutu s on
olarak, indeksli grunum(view) lere iti-
rak eden tablolar iin de alitirilamaz.
1RUNCA1E 1ABLE komutu, stan-
dart olarak t ablonun s ahibine(owner)
aittir. Bu hak baka rollere ya da kullani-
cilara aktarilamaz.
ir Sorguyu uery
AnaIyzer iIe AnaIiz Etme
SQL Query Analyzer i le bir s orgunun
alitirilma planini grsel ve metin bazli
olarak detayli grerek ustun de optimi-
26 Y7 Veritaban ProgramIama 2
zasyon y apmak mumkundur. Bylece
ayni s onucu daha hizli ureten s orgular
yazmak mumkun olabilmektedir.
SQL Server Query Analyzer ile grsel
alitirma planini grmek iin
Query>Display Ex ecution P lan{
seenegini i aretleyin. Kisayol olarak
C1RL+L`yi de kullanabilirsiniz.
Daha s onra analiz etmek ist ediginiz
sorguyu yazip alitirin.
Ardindan Estimated Execution Plan{
sekmesini tiklayin.
SQL Server`in alitirma planini
metin ortaminda bir resultset olarak
dndurmesi i in u komutu kullanabi-
lirsiniz:
SET SHOWPLAN_TEXT ON
go
Dedikten s onra alitirdiginiz butun
sorgular i in bir metin bazli alitirma
plani da gruntulenecektir.
Bu zelligi tekrar kapatmak iin ali-
tirmamiz gereken komut olduka basit:
SET SHOWPLAN_TEXT OFF
Go
dememiz yeterli olacaktir.
Ayrica daha zet ama kapsami geni
bir alima plani iktisi almak iin SQL
Server`in SHOWPLAN_ALL zelligini
aabiliriz. Bunun i in de u komutu

8ir ta blo o lu;turacak SQL cumle


cigini ali;tirma planini gormek
uzere Quer y Analyzer ile SQL Ser
ver'e gonderdigimizi varsa yalim.
8u durumda ta blo o lu;mayacagi
iin bu ta bloya ka yit ek lemeye
kalki;tigimizda boyle bir ta blonun
olmadigina dair bir hata aliriz.
Veritaban ProgramIama 2 Y7 27
alitirmamiz gerekir:
SET SHOWPLAN_ALL ON
go
dedikten sonra alitirilan butun sor-
gular zet alima plani verilecektir.
Ayni ekilde bu zelligi t ekrardan
kapatmak i in bu zelligi kapatmak
yeterli olacaktir bunun i in de u
komutu alitiracagiz:
SET SHOWPLAN_ALL OFF
Go
alitirma P lanini gsterirken S QL
server kendisine gelen sorgulari alitir-
mak yerine analiz ederek hangi ilemler-
den geerek alitirilacagini, hangi i le-
min yaklaik ne kadar zaman alacagini
gsterir, ngrur.
alitirma plani zellikle DML(Veri
Ileme Dili) iin ve 1-SQL iadeleri iin
kullanilir. Bir Sakli P rosedur`un, bir
komut taraindan agrilan 1etikleme(1-
rigger)`in daha az kaynak tuketerek daha
kisa su rede n asil gereklenebilecegini
analiz etmede aydalanacagiz.
Ornegin bir SELEC1 i adesini ger-
eklemek i in SQL Server tum t abloyu
taramak zorunda kalabilir(table s can)
Bunu nlemek iin bu tabloda bir birin-
cil anahtar alan oluturursak, bu s orgu
artik t able s can y erine in deks bulma
(index seeking) yapacaktir. Bunun mali-
yeti de bir ok durumda table scan`a gre
daha kisadir.
SHOWPLAN_1EX1 ve SHOWP-
LAN_ALL zellikleri yardimi ile alinan
metin t emelli alitirma plani daha t ek
duzedir. Her bir parametere birer s atir
gibi gsterilir. Grsel alitirma plani ise
her bir dugum i in detayli ist atistikleri
dugumun ustune gelindiginde gsterir.
Ayrica her bir dugum iin bu dugumde
yapilan i lemleri zetleyen bir i kon i le
gsterilir. Bu ikonlarin anlami iin SQL
Server ile birlikte kurulan Books Online
ya da MSDN`den y ardim alabilirsiniz.
Books Online`den Query Analyzer`in
komut ekranina Query Analyzer`
yazip bu i ki kelimeyi s etikten s onra
SHIF1 + F1 tuun a basmaniz y eter-
lidir. Bulunan konulardan en batakini
tiklayarak ikonlar hakkindaki detaylara
eriebilirsiniz. Diger konularda da bilgi
almak i in ayni y olu kullanabilirsiniz.
{Resim 11)
Import Export 0ata
Bazen MS Access(`.mdb), t ext dosyasi
ya da MS Excel ve benzeri gibi yapilan-
Pesim 11
28 Y7 Veritaban ProgramIama 2
dirilmi dosyalardan veri almak veya
bu tu rden bir dosyaya veri aktarmak
durumunda kalabiliriz. Bu durumda
Import Export Data t oolu kullanilir.
{Resim 12)
1. Bunun i in ncelikle Balat\
Programlar\Microsot S QL Server\
Import and Export Data{ takip edilerek
program balatilir.
2. Uygun olan kaynak s eilir. Ornegin
MS Access(`.mdb)
l. Uygun olan hede seilir. Ornegin MS
Access`den SQL Server`e veri alacaksak,
hede SQL Server`dir.
1. Kaynakta var olan tablolar getirilir ve
kullanicinin hangi t ablolari aktarmak
istedigi s orulur. Ist ediginiz t ablolari
iaretleyin.
5. Hemen alitirmak iin Run Immedi-
ately seenegini kullanin.
6. Bir sonu ekrani ile size ka tablonun
aktarildigi gsterilecektir.
SQL Server`den baka bir ormata
veri aktarmak iin de yapilmasi gereken
ilemler aynidir. Degien t ek ey hede
ile kaynak tu rlerinin degimesinden
ibarettir.
SL Service hanager
PUCU:
VS00S ko mut orta mindan ver i
tabanina er i;mek iin esk i a di ile
isql(Sybase'de ha len a yni a dla
kullaniliyor), SQL Server'de ise
osql.exe programi ku llanilabilir.
8unun iin ko mut sat irini a tiktan
sonra os ql deyip enter 'i tu; layin.
Ardindan kullanici adi ;ifreyi girin.
SQL komutlarinizi yazip go komutu
ile bitirdikten sonra enter tu;una
basarak sonu cunu gorebilirsiniz.
8u programi sonlandirmak iin exit
yazip enter 'i tu; lamaniz yeterlidir.
Programin daha detayli ku llanimi
iin 80L(8ooks 0nline)'den yardim
alabilirsiniz.
Pesim 12
Veritaban ProgramIama 2 Y7 29
SQL Server`i balatmak, durdurmak
veya duraklatmak i in kullanilan basit
bir hizmet y netim programcigidir.
{Resim 1l)
Bu s ervis aliirken sist em ubu-
gunda (sist em s aatinin hemen y ani)
durumunu gsteren (aliiyor, duruyor,
duraklatilmi) ikon ile birlikte grunur.
Bu ikon it tiklanirsa resimde grunen
ekran ailir.
Iletim Sistemi kapatilip aildiginda
otomatik olarak balatilmak i in bu
seenegi i aretli olarak birakmak gere-
kir.
SQL Server`de ! arkli durum i in
durum i konu mevcuttur. Ayni durum
ikonunu, Ent erprise Manager i le kay-
dettirdiginiz her bir Veritabani i in de
grebilirsiniz.
Bu ! ikon u ekildedir:
1. aliiyor, baglanilmadi: yeil ok
2. aliiyor ve baglanildi: Yeil Yuvarlak
iinde beyaz ok
l. Duraklatildi: Yu varlak i inde i ki
duey izgi
1. Durduruldu: Yu varlak i erisinde
kirmizi kare
SL Server ve XhL 0estegi
XML, yazilim ve donanimdan bagimsiz
veri t aima ve s aklama st andardi olup
eXtensible Markup Language (Genile-
tilebilir I aretleme Dili) kelimelerinden
elde edilmi bir ankronimdir. XML i le
iaretlenmi bir bilgi bir cep teleonunda
bir PC`de gsterildigi kadar kolay gste-
rilebilir. XML ayrica arkli platormlarda
alian uy gulamalar arasinda veri pay-
laimi i in ve H1 ML`den arindirilmi
olarak bilgilerin Web`e ailmasi i in de
kullanilir. XML de verinin grunumu
ve sunu mu i le i lgilenen i aretleme dili
H1ML (Hi per Metin I aretleme Dili)
gibi S GML ( Standartd Generalized
Markup Language)`den tu retilmitir.
SGML ok geni bir dil oldugundan
Web`de tam olarak kullanilmasi olduka
zordur. Bu n edenle bu tu rden geli-
tirmelere gidilerek amaca zel kisitli
elemanlardan oluan i aretleme dilleri
elde edilmitir.
SQL Server !000 veri aktarimi ve sak-
lama konusundaki bu son teknoloji iin
u destekleri saglar:
SQL Server`e URL ustun den
eriim.
XML Data Schema destegi ve bu
emalar ustunde XPath sorgulama.
XML i erikli veri ekme ve
XML`den veri ekleyebilme.
Pesim 13
30 Y7 Veritaban ProgramIama 2
XML Web Servisleri i le de bir veri-
tabaninizi XML destekli olarak Web`e
veya baka bir kurumun kullanimina
istediginiz kisitlar dogrultusunda, aa-
bilirsiniz.
XML konusunu serinin son kitabinda
detayli olarak serinin son kitabi XML ve
Web Servisleri`nde bulabilirsiniz.
rnek l:
Bir s orguda t ablolara arsinda hiyerarik
ilikiyi de i eren XML iki u retmek
Iin
SELECT * FROM kitap FOR XML RAW
kullanilir.
SL Server'de Veritabant
NesneIeri
Bu kisimda anlatilan n esnelerin bir
kismi bir nceki kitapikta detayli olarak
incelenmiti. Diger bir kismi da bu
kitapikta anlatilacaktir. Onemli oldugu
duunulen n esneler hakkinda detayli
bilgi bu seride yer almamaktadir.
Nesneler veritabani y apilari i eri-
sinde y er alir. S QL Server i lk kurul-
dugunda kendi i htiyalari i in bir dize
veritabani ve her bir veritabani da kendi
ierisinde s abit bir dize n esne i erir.
Bunlara V1YS`nin kendisinin i htiyaci
vardir.
Bir S QL Server kuruldugunda u
veritabanlari standart olarak kurulur:
Master: H angi veritabanlari olutu-
ruldu, disk kullanimi, kullanici hesap-
lari, sist em ayarlari vb. gibi veritabani
ile i lgili ortam deger ve degikenleri bu
veritabaninda yer alir.
ModeI: Yeni oluturulacak tu m verita-
banlari i in bu veritabani model alinir.
Yani ablon veritabanidir. Oluturulacak
her veritabaninda olmasi ist enen degi-
iklikler (t ablo, s akli prosedur, t rigger
vs.) bu veritabaninda yapilir.
Msdb: SQL Server Agent servisi tarain-
dan kullanilan veritabanidir.
Tempdb: Geici bilgilerin s aklandigi
veritabanidir. Bir sonraki unitede, kulla-
nimi hakkinda bilgi verilecektir.
Pubs: Ornek bilgilerin yer aldigi verita-
banidir. {Resim 11)
Her bir veritabani i erisinde y er alan
nesneler u gruplardan birine aittir:
DiyagramIar: Veritabanindaki t ablola-
rin birbiri i le i likisini gsterir. Burada
mantiksal olarak zorlayicilar vb. gibi
gelerle i le i likilendirilmi t ablolarin
ilikilerinin i ziksel olarak grunumu
yer alir.
Pesim 14
Veritaban ProgramIama 2 Y7 31
TabIoIar: Veritabaninin kayitlari s akla-
yan mxn boyutlu matrisleridir. Bir ogu
kullanici t araindan t animlanir. Sistem
taraindan kurulum aamasinda olu-
turulup kullanilan t ablolar da y er alir.
1ablolar hakkinda i lk kitapta y eterince
konumutuk, burada s adece unu da
eklemek y eterli olur s anirim: Bir t ablo
8060byte`ten daha u zun olmamalidir.
Bu, SQL Server`in disk ynetim birimi
saya`nin boyutundan kaynaklanan bir
sinirlamadir. 1ablolari meydana getiren
satirlar, s ayalar halinde s aklanir ve bir
tablonun bir satiri en azla bir saya yer
kaplayabilir, ikinci sayaya taamaz.
GrnmIer {view): Gerekte olmayan
tablolardir. Veritabaninda var olan tablo-
lar ustunden select ilemi ile getirdikleri
sonulari i ade eden n esnelerdir. ( Bir
nceki kitapikta hakkinda geni bilgi
verilmitir.)
SakIi prosedrIer {Stored Pr ocedu-
res): Bir dize 1 -SQL(MSSQLServer
- Sybase) veya PL/SQL(Oracle) komu-
tunun bir i levi y erine getirmek u zere
paketlenmi halidir.
KuIIaniciIar: Sistemdeki n esnelere
eriim hakki verilmi birer kullanici
adi ve i renin sist emdeki edegeridir.
Bir kismi sist em t araindan oluturula-
bilecegi gibi rnegin ( dbo) daha s onra
veritabani yneticisi t araindan da ekle-
!0| !erer1'6e Iaa|m|| Ver|ta|aa| ke||er|
|e| |||||M|
a|_+cce..+am|a \er|t+|+a| |r|,|m \eaet|c|.|
a|_|+c|ajejer+ter \er|t+|+a| \eae||eme 0jer+tera
a|_a+t+re+aer \er|t+|+a| \er| 0|aaca.a
a|_a+t+wr|ter \er|t+|+a| \er| \+t|c|.|
a|_aa|+am|a \er|t+|+a| ||| \eaet|c|.|
a|_aeaa+t+re+aer \er|t+|+a| eae||| .er| e|aaca
a|_aeaa+t+wr|ter \er|t+|+a| eae||| .er| +t|c|
a|_ewaer \er|t+|+a| :+||||
a|_Neae |e,
a|_.ecar|t+am|a \er|t+|+a| 0a.ea||| \eaet|c|.|
32 Y7 Veritaban ProgramIama 2
nebilir.
RoIIer: Veritabaninda yapilabilecek belli
bali i lemler, belli n esneler ustun de
belli haklar i in eriim t animlayarak
oluturulan hak grubu. Bu gruplar daha
sonra kullanicilara aktarilir. Bylece
V1YS ustun de var olan s ayisiz eriim
ve y etkilendirme i in denetleme i lemi
gruplar ustunden denetlenebilir.
DefauIt`Iar: Bir alana deger girilmemesi
halinde, bir deger i le balamasi i in
deault nesneleri tanimlanir. Ornegin bir
hesap yeni aildiginda para yatirmadigi-
niz surece hesabinizda 0 lira grunur.
KuIIanici TanimIi TipIer: Her ne kadar
ANSI S QL`de st andartta t animli veri
tiplerinin diindaki veri ti plerini kul-
lanamasak da V1YS`ler bunu aarak
kullanicinin gerektiginde veri tipi tanim-
lamalarina olanak saglarlar.
KuIIanici TanimIi FonksiyonIar: ANSI
SQL`de t animli onksiyonlarin bir
kismini ve bazi V1YS`ler t araindan
saglanan ek onksiyonlari bir nceki
kitapikta anlatilmiti. 1u m bu ANSI
ve Sistem onksiyonlarinin diinda
kullanici i htiya duydugunda onksiyon
da t animlayabilmektedir. Her n e kadar
sakli prosedurler(SP) onksiyon benzeri
bir grevi y erine getirse de kullanici
tanimli onksiyonlar i lev olarak daha
zel ilemlerde kullanilir.
TetikIemeIer {Trigger): 1rigger`ler bir
tabloya kayit eklendiginde veya si lindi-
ginde otomatik olarak devreye giren zel
sakli prosedurlerdir. Ozellikle veritabani
tutarliligini saglamak iin kisitlayicilarin
yetersiz kaldigi durumlarda ( rnegin
!0| !erer 1'6e Iaa|m|| !erer ke||er|
|e| |||||M|
a|cre+ter \er|t+|+a| e|a,taraca.a
a|.|+am|a ||.| \eaet|c|.|
jrece..+am|a |,|em \eaet|c|.|
.ecar|t+am|a 0a.ea||| \eaet|c|.|
.er.er+am|a :aaaca \eaet|c|.|
.etaj+am|a |ara|am \eaet|c|.|
..+am|a :|.tem \eaet|c|.|
|a||+am|a Iej|a |||eme \eaet|c|.|
Veritaban ProgramIama 2 Y7 33
basamakli guncelleme gibi) kullanilir.
SL Server ve KuIIantct
Yonetimi
SQL Server`de kullanici y netimi i le
ilgili i ki ti p ge bulunmaktadir: R oller
ve kullanicilar. Ku llanici t ek bir kiiye
ait t animlamalari i erirken roller y etki
ve eriim t animlamalarini gruplamada
kullanilir. Bir rol bir ok kullaniciya
atanarak, haklar ustunde bir gruplamali
eriim ynetimi uygulanabilir. Bylelikle
her bir kullanicinin haklarini teker teker
oluturup y netmek y erine roller ciddi
ekilde denetlenebilir. unku bir ok
kullanici i in n eredeyse ayni haklar ve
yetkiler verilir. Bir okul otomasyonu ger-
ekletiriyorsak, bir ok gretmen kulla-
nicisinin ayni tablo ya da 1-SQL iade-
lerine eriimleri olmak durumundadir.
Ogrenciler iin de ayni ey geerlidir.
RoIIer:
Birden azla kiiye verilebilen ve y etki-
lendirmeler i in bir grup oluturmada
kullanilan kullanicilara y nelik t anim-
lamalardir.
Halihazirda var olan ve degitirile-
meyen rollere s abit sist em rolu(ixed
system role) denir. Iki grup sabit sist em
rolu vardir: s abit s erver rolleri ve s abit
veritabani rolleri...
KuIIaniciIar:
SQL Query Analyzer`de yeni bir kulla-
nici oluturmak i in, create user deyimi
kullanilir. Genel kullanimi u ekildedir.
CREATE USER (Kullanici_adi)
identied by (sifre) default
tablespace kullanici_verileri;
KuIIanici_adi:
kullanici adi. Zorunlu.
sifre: Ku llanicinin i residir.
kullanici_verileri: Ku llanici verilerinin
nerede tutuldugunu belirtir.
sa (systemAdmin) rolune sahip temel
kullanicidir. Guvenlik n edeniyle bu
kullanicinin adini degitirilmesi nerilir.
Ancak bu ayri bir tartima konusu.
Yetki verme
(Crant Komutu)
Grant komutu ile bir kullanicinin veya
tum kullanicilarin bir 1-SQL iadesine
ya da veritabanina eriimi iin guvenlik
sisteminde izin amaya yarar. Bu komut
ile yapilabilecek hemen her ey Enterprise
Manager programi ile de yapilabilir.
Genel kullanimi u ekildedir:
GRANT {ALL [PRIVILEGES] |izin[,....n]}
{
[(kolon[,...n])] ON {tablo|view}
[(sutun[,...n])]
|ON {sp|ep|udf}
}
TO guvenlik_hesabi[,...n]
[WITH GRANT OPTION]
[AS {kullanici_grubu|rol}]
ALL: 1um verilebilecek haklarin veri -
lecegini gsterir. db_owner, sysadmin ve
database object owner taraindan kull a-
34 Y7 Veritaban ProgramIama 2
nilabilir.
TO: iznin kimlere verilecegini belirtir.
guvenlik_hesabi: Bir veritabani giri
hesabi, iletim sistemi kullanicisi ya da
domain kullanicisi olabilir.
n: Bir nunde geen eyin n dea tekrar
edebilir oldugunu gsteren yer tutucu.
PRIVILEGES: ANSI--!`ye uyumlu olsun
diye konmu bir kelime olup kullanimi
istege baglidir.
sp: Sakli Prosedur adi.
ep: Geniletilmi Prosedur adi.
udf: Kullanici 1animli Fonksiyon adi .
izin:
1ablolar iin SELEC1, INSER1,
DELE1E, REFERENCES veya
UPDA1E gibi izinlerdir. UPDA1E ve
SELEC1 iin gerekirse sutun tanimlari
da verilebilir. Aksi halde verilen izin tum
sutunlar iin geerli olur. REFERENCES
ile tablo ustunde bir alana yabanci anahtar
olarak reerans ieren bir baka tablo vs.
oluturabilme izni verir.
Nesneler iin (SP, EP, UDF) ek olarak
tek izin vardir, EXECU1E. EXECU1E
ile bir nesneye alitirilma izni verilebi -
lir. Ayrica REFERENCES ile reerans
verebilme izni de saglanabilir. Nesneler
iin REFERENCES, View olutururken
kullanilan WI1H SCHEMABINDING
deyimi ile bu nesnenin urettigi sonulari
ierebilmesine hak saglar.
tabIo: Veritabaninda yer alan tablo adi
view: Veritabaninda tanimli view adi
sutun: adi verilen tablo ya da view`de
geen sutun ad(lar)i
WITH GRANT OPTION : Sadece nes -
neler iin geerli olan bu deyim ile izin
verilen bir kullanicinin bu nesne ustunde
baka birine daha kullanim izni verebilme
hakki saglayabilmesine yarar.
AS: Nesne iin yetki tanimlamasi, kull a-
nim yetkisi olanlarin diinda Bir kullanici
grubuna ya da role de yetkilendirme yet -
kisi amak iin kullanilir.
rnek 1:
sp_kitapbul adinda bir sakli yordam
ustunde SQLServer`e giri hakki olan
herkese tum haklarini aalim:
GRANT ALL ON sp_kitapbul TO public;
ile bu i tanimlanir.
Yetki KaIdtrma
(Pevoke Komutu)
GRAN1 komutu ile verilen haklarin bir
ogu Enterprise Manager kullanilarak
grsel bir ortamda geri alinabilir ancak
Query Analyzer ile kod yazarak bu ha k-
lari geri almak iin REVOKE komutu
kullanilir.
Genel kullanimi u ekildedir:
REVOKE [GRANT OPTIONS FOR]
{ALL [PRIVILEGES] |izin[,....n]}
{
[(kolon[,...n])] ON {tablo|view}
[(sutun[,...n])]
|ON {sp|ep|udf}
}
{TO|FROM}
guvenlik_hesabi[,...n]
[CASCADE]
[AS {kullanici_grubu|rol}]
Veritaban ProgramIama 2 Y7 35
REVOKE komutunu alitirabilmek
iin sys_admin sabit sunucu rolune veya
db_owner, db_securityAdmin sabit veri -
tabani rollerine sahip kullanici olmak ve
elbette nesne iin dbo olmak gerekir.
ALL: Nesne ustunde verilen tum izinlerin
iptal edilecegini anlatir.
FROM: Guvenlik hesabi listesi belirtmede
kullanilir.
GRANT OPTION FOR: Bu kelimelerle
REVOKE komutu alitirildiginda ku l-
lanicililar nesneleri kullanmaya devam
eder ancak yeni kullanim hakki tani m-
layamaz.
guvenIik_hesabi: Bir veritabani giri
hesabi, iletim sistemi kullanicisi ya da
domain kullanicisi olabilir.
n: Bir nunde geen eyin n dea tekrar
edebilir oldugunu gsteren yer tutucu.
PRIVILEGES: ANSI--!`ye uyumlu olsun
diye konmu bir kelime olup kullanimi
istege baglidir.
sp: Sakli Prosedur adi.
ep: Geniletilmi Prosedur adi.
udf: Kullanici 1animli Fonksiyon adi .
izin:
1ablolar iin SELEC1, INSER1,
DELE1E, REFERENCES veya
UPDA1E gibi izinlerdir. UPDA1E ve
SELEC1 iin gerekirse sutun tanimlari
da verilebilir. Aksi halde verilen izin tum
sutunlar iin geerli olur. REFERENCES
ile tablo ustunde bir alana yabanci anahtar
olarak reerans ieren bir baka tablo vs.
oluturabilme izni verir.
Nesneler iin (SP, EP, UDF) ek olarak
tek izin vardir, EXECU1E. EXECU1E
ile bir nesneye alitirilma izni verilebi -
lir.Ayrica REFERENCES ile reerans
verebilme izni de saglanabilir. Nesneler
iin REFERECES, View olutururken
kullanilan WI1H SCHEMABINDING
deyimi ile bu nesnenin urettigi sonulari
ierebilmesine hak saglar.
tablo: Veritabaninda yer alan tablo adi
view: Veritabaninda tanimli view adi
sutun: Adi verilen tablo ya da view`de
geen sutun ad(lar)i
CASCADE: Hak verme hakkini kaldiri r-
ken kullanilir. Yetki verme yetkisi kaldiril-
diktan sonra, bu kiiler taraindan yetki -
lendirilen kiilerin yetkilerini de kaldirir.
rnek 5:
ogrenci kullanicisindan sakli prosedur ve
tablo oluturma yetkilerini kaldiralim:
REVOKE CREATE PROC, CREATE TABLE
FROM ogrenci
rnek 6:
Bir nceki blumde ustunde yetki tani m-

8ir sakli prosedur iin yetki ver me


yetkisi dbo'ya a ittir.(Yani bu nes
neyi o lu;turan k i;iye) 8u ne denle
PE70KE ko mutu ali;tirildiginda
bu sakli proseduru olu;turan ki;inin
nesne ustun deki yetkilendirme ve
kullanma hakki kaybolmaz.

Veritaban ProgramIama 2 Y7 37
A
NSI S QL, veritabani i le i lgili
veri i leme ve duzenleme i lev-
leri iin gelitirilmi bir standart
dildir. Ancak bu dil zaman zaman bir
programlama dili olmadigindan kayit
ilemede y etersiz kalabilmektedir.
unku, gelimi programlama dillerinde
yer aldigi halde bu dilde WHILE, IF gibi
temel mantik ve dngu yapilari mevcut
degildir. Degiken kullanimi da tanimda
yer almaz. It e 1ransact-SQL bu n ok-
tada devreye giren ANSI -! dahilinde bir
standart dii dildir.
1-SQL`in gelitirilmesindeki en
temel ama, V1YS diinda dngu veya
mantiksal karilatirma gerektiren konu-
larda ayrica bir derleyiciye, programlama
dili grenmeye, sist em oturtmaya gerek
kalmadan bu tu rden i lemleri y erine
getirebilecek olanaklari s aglamaktir. Bir
sonraki konuda yer alan stored procedu-
res, triggers gibi programciklari yazarken
bu dili kullanacagiz.
T-SL iIe ANSI-SL
komutIartnt aItttrma:
1-SQL i le S QL komutlarini V1YS`ye
alitirmasini syleyebiliriz:
Bir deada, SQLServer birden azla SQL
komutunu arka arkaya alitirabilir.
Ancak her bir komutun sonuna go ekle-
memizi ister.
Genel yapisi u ekildedir:
ANSI-SQL KOMUTLARI
BU SATIRLARA
YAZILIR
go
rnek 7:
Bu projede kullandigimiz veritabanini
oluturalim:
CREATE database dbKutuphane on default
go
use dbKutuphane
go
CREATE TABLE kitaplar(
kitapNo INTEGER NOT NULL,
kitapAdi VARCHAR(63) NOT NULL,
ISBNNo VARCHAR(15),
sayfaSayisi INTEGER,
kitapOzeti VARCHAR(255))
go
Degiken TanimIama ve KuIIanma:
1-SQL kullanmamizin en buyuk neden-
T-SL ve VTYS temeIIi
programIama
0KKAT:
TSQL V icrosoft SQL Server ve
Sybase iin geerli bir dildir. 0racle
kullananlarin, PL/ SQL o grenmeleri
gerekir. Ancak bu iki dil birbiri ile
yakla;ik ayni ozellikleri haizdir.
38 Y7 Veritaban ProgramIama 2
lerinden birinin degiken tanimlama
oldugunu sylemitik.
Degiken: Programlama dillerinde,
degeri daha sonra akilara gre degiecek
bir deger iin haizada(RAM`de) bir yer
ayirmak iin kullanilan yapidir. Haiz a-
daki bu degere daha sonra degikenin adi
ile eriilir ve yeni degeri atanir. Degikene
atanan her yeni deger bir eski degeri siler.
Degikenler u ekilde tanimlanir:
declare @degisken_adi veritipi[(boyut)]
rnek 8:
declare @kitapNo INT
declare @kitapAdi VARCHAR(63)
go
ya da bir satirda birden azla degiken
tanimlayabiliriz:
rnek 9:
declare @kitapNo INT,@kitapAdi
VARCHAR(63)
go
Degikenlere deger atama,
declare @kitapNo INT, @kitapAdi VARC-
HAR(63)
SET @kitapNo=255
SET @kitapAdi= `107 Kimya yks'
SET @kitapNo=256 -- Artik kitapNo
degikeninin degeri 256,255 silindi.
go
eklinde yapilir.
Ancak 1-SQL`in asil amaci SQL`in
yeteneklerini artirmaktir. Bundan dolayi
degikenlerin en genel kullanim amaci,
bir sorgunun sonucundaki degerlerden
birini alip bir degikene aktarmaktir.
rnek 10:
declare @enSonEklenenKitap INT
SELECT @enSonEklenenKitap=MAX(kitapNo)
FROM Kitap
go
DegikenIer ve Sistem FonksiyonIari:
Bir veritabanina ayni anda bir ok kii
oturum aabilir. Bir tek oturumda geerli
degikenlere yerel degiken denir. Bazen
butun oturumlarda geerli degikenlere
ihtiya duyulur. Bu tur durumlarda,
ortam degerlini ayarlamak uzere veya
eitli durumlari tanimlamak uzere onk-
siyonlar kullanilir. Bu onksiyonlarin bir
listesini kitabin sonundaki ek kisminda
bulabilirsiniz.
0KKAT:
SQL'deki ve bir ok diger program
lama dillerinin aks ine, T SQL'deki
degi;kenler @ ile ba;lamak zorun
dadir.
PUCU:
0egi;ken isimlerinin nelerden olu;
masi gerektigi hakkinda genel bilgi
iin ser inin ilk k itabinda [7erita
bani Programlama, s .15, Temmuz
200J] bulabilirsiniz. Seride yer
almasi ne deniyle kura llara burada
yeniden bu konuya yer verilmedi.
Veritaban ProgramIama 2 Y7 39
rnek 11:
stunde alimakta oldugunuz SQLSer-
ver`e aildigindan beri t oplam ka kere
kullanicilar veya programlar t araindan
baglanilmitir
SELECT @@connections;
--
>>27
SQL Server`i durdurup yeniden ba-
latin ve ayni eyi tekrar deneyin. imdi ne
gruyorsunuz
Sayinin t ekrar sii rdan baladigini
greceksiniz.
Print komutu:
Bazen degikenlerin degerini, hata mesaj-
larini vs. mesaj olarak grmek isteriz. Bu
tur durumlarda, print komutu kullanilir.
rnek 12:
Kitap numarasini SQL sorgusu ile bula-
lim ve bu sonucu yazdiralim:
declare @sonuc int
SELECT @sonuc= COUNT(*)
FROM Kitap
print @sonuc
go
--
>> 16
Aki KontroIIeri:
1-SQL`i ANSI-SQL`e eklenti olarak
gerektiren en nemli n edenlerden biri,
ANSI-SQL`in aki kontrollerine i zin
vermemesidir. 1-SQL bir programlama
dili kadar geni olmasa da belli bali aki
kontrollerini saglar.
1-SQL`de aki kontrolleri BEGIN i le
balayip END i le biten bloklar arasinda
yazilir.
Genel Kullanimi u ekildedir:
BEGIN
Program kodlari
....
...
END
1-SQL`in sun dugu belli bali aki
kontrolleri unlardir:
0KKAT:
SY8ASE'de yapilandirma fonks i
yonlarinin yerine orta m degerleri,
global degi;kenler a di ile an ilirlar.
Kullanim konusun da bariz bir fark
olmamasina ragmen her turlu teknik
dokumanda isimler bu ;ekilde kulla
nilmaktadir.
PUCU:
TSQL'de bir satirin dikkate alinma
masi isteniyorsa, '' ile bu belirti
lebilir. V SSQLServer ve Sybase'de
ayni i;lemi C, C++, C#, Java 'da
oldugu gibi '/*..... */' ile de yapa
bilirsiniz. SY8ASE, '' i;aretini bazi
toolarinda dikkate a lmazken, V S
SQL Query Analyzer de '//' i;aretini
dikkate almamaktadir. Aslinda ''
SQL92'de tan imlanan bir a iklama
belirtici i;arettir.
40 Y7 Veritaban ProgramIama 2
1.IF ... ELSE karar yapisi
i(art1) deki art1 dogru ise i(art1)`den
sonra gelen BEGIN ile END arasindaki
kodlar alitirilir. Daha s onra i blogu-
nun en altindaki kodlardan devam eder.
art1 dogru degil ise, elsei(art!)deki
art!`ye bakilir. Bu art dogru is e, arti
takip eden BEGIN i le E ND i adeleri
arasindaki kodlar alitirilir, i blogunun
sonuna gider ve takip eden kodlari ali-
tirir. art! de yanlisa, elsei(art)`deki
art`e bakilir. art dogru ise takip eden
BEGIN i le E ND deyimleri arasindaki
kodlar alitirilir, i blogunun en sonuna
gider ve t akip eden kodlari alitirir.
art y anli is e bu aradaki kodlari da
alitirmadan geer.
genel yapisi u ekildedir:
if(artlar)
begin
....
end
else if(artlar)
begin
...
end
Co Komutu
8ir SQL Server'e bir
seferde birden fazla
komut gonderilebilir.
SQL Server bu komutlari
yiginlar halinde almak
tadir. C0 komutu, TSQL
komut yiginin sonunu
belirtmek iin kullanilir.
Cenel kullanimi,
C0
;eklindedir.
C0 aslinda kendisi
TSQL'in bir parasi
degildir. Query Analyzer,
osql ve isql toolari tara
findan algilanabilen bir
komuttur.
SQL Server toolari
C0 komutunu, TSQL
komutlarindan olu;an
yigini SQL Server'e gon
dermek iin bir i;aret
olarak yorumlarlar. En
sonunda C0 komutu
verilmedike, Client
uygulamalari komutlari
sunucuya gondermezler,
dogalama sorgu oturu
munun kapanmasi iin
de yine C0 komutuna
ihtiya duyulur.
TSQL komutlari, C0
komutu ile ayni satirda
yer alamaz, ancak Co
komutundan sonra aik
lama gelebilir.
Kullanicinin komut
yiginlari hususunda
kurallar riayet etmelidir.
0rnegin, Stored Proce
dure (SP iin bkz. 8olum:
J) agirirken, SP ya yigi
nin ilk komutu olmalidir
veya EXEC komutu ile
birlikte kullanilmalidir.
Ayrica, bir yerel degi;
kenin etki alani komut
yigini ile sinirlidir. 8ir
yerde C0 dendikten
sonra, yeni bir yigin ba;
ladigindan C0 komutun
dan once tanimlanan ya
da deger atanan skaler
degi;kenler ve ierikleri
kaybedilecektir. Ancak
ayni ;ey veriye satir satir
eri;mek iin kullandig i
miz Cursor'lerde geerli
degildir. Yine SP tani m
layacaksak, bu komutun
yiginin ilk satirinda yer
almasi gerekir. Aksi halde
SQL server hata verir ve
SP olu;turmaz.
Drnek 13:
-- dbKutuphane veri-
Veritaban ProgramIama 2 Y7 41
else
begin
....
end
rnek 11:
Kitapliktaki en kalin kitap hakkinda ikir
beyan eden 1-SQL kodu:
declare @sayfaSayisi int
SELECT @sayfaSayisi=MAX(sayfaSayisi)
FROM Kitap
if (@sayfaSayisi>500)
BEGIN
kitabin s aya s ayisi 00`den azla is e
burasi aliir.
print `Bu kitaplikta ok kalin bir
kitap varmi.'
END
else if(@sayfaSayisi>100)
BEGIN
kitabin s aya s ayisi 100`den buyuk,
00 den kuuk ise burasi aliir
print kitapliktaki en kalin kitap ok
da kalin degil.`
tabanini kullanmaya
balamasi iin
-- veritabanina bir
kod yigini gnderelim.
-- Bir satirlik bir
yigin.
USE dbKutuphane
GO -- Bir T-SQL komut
yigini bitti ve yenisi
baladi. Bu satir
-- bir st satirda,
GO komutu ile birlikte
aiklama satiri kul-
lanildi.
DECLARE @degisken
VARCHAR(50)
SELECT @degisken =
`Merhaba T-SQL.'
GO -- @degisken adli
degiken artik geerli
degil nk T-SQL
komut yigini biti-
rildi..
PRINT @degisken
-- Haliyle de bu
kisimda hata meydana
gelecektir. nk
degiken artik yok..
GO
-- Yeni bir T-SQL
komut yigini burada
baladi.
-- Burada agrilan
sakli prosedr dzgn
olarak agrilacaktir.
-- nk yiginin ilk
komutu...
sp_who
SELECT @@VERSION;
-- Hata verecek nk
ilk satir olmayan bir
yerde sakli prosedr
agriliyor.
-- SP ya yiginin ilk
komutu olmali veya
EXEC komutu ile bir-
likte kullanilmalidir.
sp_who
GO
008C, 0LE08 ve
diger bile;enler ustunden
ali;an uygulamalar, C0
komutunu SQLServer'e
gondermezler. 8oyle
bir komut bu bile;enler
ustunden gonderilmeye
ali;ilirsa bir hata me y
dana gelir. C0 komutunu
kullanabilmek iin bir
izin gerekmez. Siste m
deki herhangi bir kulla
nici tarafindan bu komut
ali;tirilabilir. unku tek
ba;ina veritabani iin
hibir ;ey demektir.
42 Y7 Veritaban ProgramIama 2
END
else
BEGIN

kitabin s aya s ayisi 100`den kuuk is e
bu kisim aliir.
print bu kutuphanede brourden
baka bir ey yok mu`
END
go
--
>> kitapliktaki en kalin kitap ok da
kalin degil.
Bir s orguya bagli i y apilari kullani-
labilir:
rnek 15:

if(SELECT MAX(SayfaSayisi) FROM
Kitap)>=500
BEGIN
print `bu kitaplikta kalin kitaplar
var'
END
else
BEGIN

print `bu kitaplikta kalin kitap yok'
END
--
>> bu kitaplikta kalin kitap yok
Bu durumda bir nceki rnegimizi u
ekilde de kodlayabiliriz:
if(SELECT MAX(SayfaSayisi) FROM
Kitap)>=500
print `bu kitaplikta kalin kitaplar
var'
else
print `bu kitaplikta kalin kitap yok'
Herhangi bir dallanmayi i ki s atira
tamamlayin. Ne gruyorsunuz (Query
Analyzer hata verecektir.)
IF y apisinin en y aygin kullanim-
larindan biri de I F E XIS1S y apisidir.
Genellikle bir veri ya da nesnenin daha
nceden var olup olmadigi bu y api i le
test edilir.
rnek 16:
Hibir kitap kaydi yoksa kitap tablosunu
silmek iin:
IF NOT EXISTS(SELECT * FROM Kitap)
DROP TABLE kitap
--
>>(hi satir silinmez)
2.CASE deyimi:
Case y apisi ANSI-! st andartlari i le
uyumlu bir karar dngusudur ve olduka
kisa kod ile etkin programlar oluturma-
miza y arar. Ornegin diaridaki kitaplar
iin diarida` y azabilecek bir kod bu
komut sayesinde basite yazilabilir.
Genel yapisi u ekildedir:
PUCU:
8ECN ve EN0, C/C++/C#/Java gibi
programlama dillerindeki '[' ve ']'
gibi kullanilir. Ayni i;lev iin 0elp
hi'de 8ECN ve EN0 kullanilir.
PUCU:
Prosedurel dillerde o ldugu gibi,
tek sat irlik if iin blok kullanimina
gerek yoktur.
Veritaban ProgramIama 2 Y7 43
...
CASE
WHEN art THEN deger
[ ELSE deger]
END
rnek 17:
Odun tablosunda yer alan kitap numa-
ralarinin bir dkumunu ve i erde is e
yanina ieride, diarida ise diarida yaz-
diracak 1-SQL kodunu oluturalim:
SELECT kitapNo,geldiMi, `kitapDurumu'=
Case

WHEN geldiMi = 0 THEN `Diarida'

WHEN geldiMi = 1 THEN `eride'
End
FROM odunc
ISNULL fonksiyonu:
ISNULL(kontrol_edilecek_deger, nu ll_
ise_cikacak_deger) eklinde kullanilir.
kontroI_ediIecek_deger: Bir sutun
adi y a da degiken adi olabilir.
null_ise_cikacak_deger: Bir sutun adi,
degiken adi veya sabit bir deger olabilir.
rnek 18:
declare @degisken VARCHAR(29)
SELECT ISNULL(@degisken,'boluk ise
bu deger seilecek')
--
>> boluk ise bu deger seilecek
3.WhiIe 0ongs
WHILE ile, bir ilemi istedigimiz kadar
tekrarlatabiliriz. Bu bize t ekrar gerekti-
ren ilemlere kolaylik saglar.
Genel yapisi u ekildedir:
WHILE art
BEGIN
Tekrarlamasi gereken kodlar buraya
yazilir
END
art s aglanincaya kadar, BEGIN i le
END arasina y azilan kodlar alitirila-
caktir.
rnek 19:
Integer bir degiken t animlayalim ve
degeri 1 oluncaya kadar bir artiralim.
1 oldugunda da yazdiralim:
PUCU:
Query Analyzer'de bir ko mut ya
da ke lime hakk inda yardim a lmak
isterseniz, (normal bir kuru lum
iin) o ke limeyi se tikten sonra ,
klavyenizden Shift + F1 tu; la
rina basmaniz yeterli o lacaktir.
8oylelikle, V SSQL Server'iniz ile
birlikte kuru lan 8ooks 0nline'den
aradiginiz ke lime ile ilgili konu lar
seilecektir.
44 Y7 Veritaban ProgramIama 2
DECLARE @sayac INT
SELECT @sayac = 1
WHILE (@sayac < 15)
BEGIN
SELECT @sayac = @sayac + 1
END
print `sayac :'
print @sayac
--
>> sayac :
>>15
BREAK komutu:
Break komutu, WHILE dngusunden
bir u arttan dolayi ikmak u zere kul-
lanilir. BREAK i le w hile dngusunden
ikildiginda, WHILE`in E ND`ini t akip
eden kodlardan devam edilir.
rnek 20:
Yukaridaki rnek i in, s ayac degerinin
1 olmasi durumu bizim i in y eterlidir
ve bu durumda dnguden ikmamiz
gereksin:
DECLARE @sayac INT
SELECT @sayac = 0
WHILE (@sayac <> 15)
BEGIN
SELECT @sayac = @sayac + 2
if @sayac > 15
BEGIN
print `Bir alt satir olmasa kisir
dng hatasi olacakti'
break
END
else
BEGIN
Print `Henz bir kisir dng hatasi
olmadi'
END
END
print `sayac :'
print @sayac
--
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Henz bir kisir dng hatasi olmadi
>>Bir alt satir olmasa kisir dng
hatasi olacakti
>>sayac :
>>16
CONTINUE komutu:
Break komutu gibi, WHILE dngusunde
bir u arti kontrol etmek i in kullani-
lir. Ancak bu komut, break`in aksine
WHILE y apisinin balangicina gturur
ve eldeki degerlerle oradan programcigin
devam etmesini saglar.
rnek 21:
DECLARE @sayac INT
SELECT @sayac = 1
WHILE (@sayac < 15)
BEGIN
SELECT @sayac = @sayac + 1
if (@sayac=11)
BEGIN
Continue
END
print `sayac : `
print @sayac
END
go
Sonucunda, 1,!,,!,,6,7,8,-,10,1!,1,
1!,1 yazdirilacaktir ama 11 yazdirilma-
yacaktir.
1-SQL ile oluturulup ynetilebilecek
nesneler unlardir:
rnek 22:
(Ev Odevi)Bir nceki rnegi, continue
yerine break koyarak t ekrar ediniz. Ne
sonu ile karilatiniz
Cevap: 1,!,,!,,6,7,8,-,10
Ceici TabIoIar
Bazen geici bir su re i in ek t ablolara
ihtiya duyabiliriz. Bu tu r durumlarda,
1-SQL ile geici tablolar oluturup onlari
Veritaban ProgramIama 2 Y7 45
kullanabiliriz. Geici t ablolar, kullanici
iki yaptiginda veya SQLServer kapatil-
diginda otomatik olarak silinirler.
Geici t ablolar oluturmanin i ki yolu
vardir:
1.Yntem: Oturum boyunca geerli geici
tablolar oluturmak iin kullanilir.
CREATE TABLE #tablo_adi(
Alan1 tur1[(boyut1)] [[NOT] NULL],
Alan2 tur2[(boyut2)] [[NOT] NULL],
....
Alann turn[(boyutn)] [[NOT] NULL]
)
Bu ekilde oluturulan t ablolar
oturum kapandiginda veya S QL Server
durduruldugunda silinir.
rnek 2l:
Geici bir kitaplar tablosu oluturalim:
CREATE TABLE #kitap(
KitapNo INT,
KitapAdi VARCHAR(55),
ISBNNo CHAR(16)
)
Daha sonra tabloya, normal bir tabloy-
mu gibi kayit ekleyebiliriz:
INSERT INTO #kitap
SELECT kitapNo,kitapAdi,ISBNNo
FROM Kitap
WHERE kitapNo < 10
Ya da tabloda yer alan kayitlari

SELECT * FROM #kitap
Ile grebiliriz. Kayitlari guncelleyebi-
liriz ya da silebiliriz. Ancak bu tablo, otu-
rumu kapattigimiz anda veya SQLServer
kapatildigi anda si linecektir. Bunun
diinda biz de istedigimiz zaman bu tab-
loyu bildigimiz yntemle silebiliriz:
DROP TABLE #kitap
go
2.Yntem:
Geici tablo oluturmanin bir diger yolu,
tempdb adli veritabani dosyasina bir tablo
amaktir. Bu veritabanindaki t ablolar,
sadece SQLServer kapatildiginda silinir.
Genel yapisi yledir:
CREATE TABLE tempdb..tablo_adi(
Alan1 tur1[(boyut1)] [[NOT] NULL],
Alan2 tur2[(boyut2)] [[NOT] NULL],
....
Alann turn[(boyutn)] [[NOT] NULL]
)
Bu y ntemle oluturulan geici t ab-
lolar, S QL Server durduruldugu anda
kaybolur. unku t empdb adli verita-

0LUVCUL HATA!!!
WHLE dongusunde, dongunun
devam e dip et meyecegini ta yin
eden ;art k ismina, mutlaka sa gla
nacak bir ko;ul yazdiginizdan emin
olun. Aksi ha lde, sonsuza ka dar
ali;acak bir ko d yazabilirsiniz
ki boyle bir ;e y pratikte mevcut
degildir. Sadece SQL Server'in
kilitlenmesine neden olursunuz. 8ir
onceki ornekte , @sa yac degi;keni
14 ve 16 degerlerini alacak anacak
asla 15 degerini a lamayacaktir. 8u
durumda sonsuza ka dar ali;acak
bir ko d yazmi; o luruz. 0uru mu if
deyimi ierisinde kontro l e derek
olumcul hatayi engelledik.
46 Y7 Veritaban ProgramIama 2
banini S QL s erver aildigi anda bola-
tacaktir. Bazen, kullanici iki y aptigi
halde geici t ablonun s aklanmasi i hti-
yaci olabilir. Bu tur durumlarda, geici
tablo S QL Server kapanincaya kadar
haizada kalip, S QL s erver kapatildi-
ginda silinecekse, tempdb`de tablo ama
yntemi kullanilabilir.
rnek 21:
CREATE TABLE tempdb..kitap(
KitapNo INT,
KitapAdi VARCHAR(55),
ISBNNo CHAR(16)
)
go
{Resim 15)
rnek 25:
(ev devi)
Yntem i le geici t abloyu oluturun.
Daha sonra bu tabloya bir deger girin.
Enterprise manager i le t abloyu gr-
meye aliin.
Query Analyzer i le t abloyu grmeye
aliin (select ile).
Query Analyzer`i kapatip ain.
1ablodaki kayitlari s emeyi deneyin.
Ne grdunuz
Ayni ilemi ikinci ekilde geici tablo
aarak onun ustunde test edin.
KontroI ZorIayiciIari
{Check Constraints):
Diger zorlayicilar hakkinda daha geni
bilgi ilk kitapikta verilmiti. Zorlayicilar
genel olarak bir t ablo oluturulurken
tanimlanir ve veri butunlugunu s agla-
mayi amalayan t animlamalardir.Bir
tablo oluturulurken, herhangi bir alan
iin girilebilecek veri tu rlerini bir grup
veya kural i le sini rlamak i in kontrol
zorlayicilari kullanilir.
rnek 26:
Bir i l t ablosu oluturacagiz. 1u m i lle-
rin t raik kodlarinin (u lkemizde) 1-81
arasinda oldugunu biliyoruz ve t eleon
kodlarinin da 111 ile --- arasinda oldu-
gunu biliyoruz. Bu t animlari t abloya
yansitalim:
CREATE TABLE tblIL(
ilTrKod INT CONSTRAINT cns_ilTrKod
CHECK ( ilTrKod BETWEEN 1 AND 8181),
ilAdi VARCHAR(15),
ilTelKod INT CONSTRAINT cns_ilTelKod
CHECK (ilTelKod BETWEEN 111 AND 999),
)
eklinde oluturulan i l t ablosundaki
zorlayicilar il traik kodu olarak 1-81 ara-
liginin diinda, il teleon kodu olarak da
100 i le --- arasindaki s ayilarin diinda
bir deger girilmesini nleyecektir.


48 Y7 Veritaban ProgramIama 2
Prosedr ne demektir!
Nesneye dayali programlama bu kadar
populer degilken, programlar s adece
prosedur denilen paraciklardan olu-
urdu. H er bir prosedur, belli bir ilevi
yerine getirmek i in zenle y apilandi-
rilmi program paracigidir. Mesela, i ki
sayi alip bunlarin t oplamlarini hesapla-
yan bir kod parasini toplayici adinda bir
prosedur i erisine paketleyebiliriz. Bir
prosedur, baka bir prosedur ierisinden
agrilabilir. Bu da sik kullanilan ilemler
iin y azilmi kodlarin bir dea y azilip
ok dea kullanilmasini bylelikle de
programlamayi kolaylatirmayi amalar.
Sakli prosedurler, bir ok gelimi
programlama dilindeki onksiyon y api-
larina karilik gelir. Birden azla ilemi,
paketlenmi bir halde bir t ek komut i le
alitirmamiz gerektiginde stored proce-
dures kullanilir. I lemden kasit 1-SQL
ile yapilabilen her eydir.
Stored procedure, 1-80`li yi llarin
sonunda Sybase S QLServer i le birlikte
kullanima girdi. En buyuk zelligi
sorgularin nceden hazirlanmasi
(derlenmesi) ve V1YS i le ayni u zayda
alimasindan dolayi daha hizli s onu
vermesidir.
Bir SP oluturulduktan sonra, verita-
bani sunucusunda s aklanir. Her i htiya
duyuldugunda ayni sp dealarca agrila-
bilir. Cursor gibi oturum kapandiginda
silinmez.
Network bazli alimalarda ag traigi
ve sist em kaynaklarinin kullanimini
duzenleyerek de perormans artii saglar.
Bir dize i lem, bir t ek paket i erisinde
yer alir. Gerektiginde bir t ek komut i le
tetiklenebilir. P aketin t amami aliin-
caya kadar ist emde bulunan t erminale
hibir ey gnderilmez. 1u m komutlar
bittiginde bir tek sonu gnderilir. Bu da
bazi durumlarda ag traigini rahatlatir.
Bir SP sist em t araindan oluturul-
dugu anda u aamalara tabi tutulur:
SP`nin bileenleri paralara ayritirilir
Veritabani i erisinde t able,view gibi
baka n esnelere atita bulunan ree-
ranslar varsa, geerli olup olmadiklari
kontrol edilir. ( Geerli:1-nesne varmi,
!-izin var mi)
Kontrollerden geen SP`nin adi sysob-
jects tablosuna, kodlari ise syscomments
tablosuna saklanir.
Bu i lemlerle birlikte derleme i lemi
yapilir. Normalizasyon i lemleri olarak
da anilan bu i lemler s onucunda, aga
emasi elde edilir. Bu ema da sysproce-
dures tablosunda saklanir.
SP herhangi bir anda agrildiginda,
SakIt ProsedrIer
(Stored Procedures)
Veritaban ProgramIama 2 Y7 49
ilk kez aliiyorsa bu i lemler gerek-
letirilir. I lk s ea agrilmiyorsa, kontrol,
sorgulama agaci oluturma i lemleri
yapilmaz ve olduka hizli bir ekilde
SP`nin derlenmi hali aliir. Bundan
dolayi s p`ler derlenen n esnelerden biri
olarak anilir.
SP`Ier u faydaIari sagIar:
1. Uygulamanin getirdigi bazi i kural-
lari prosedur i inde t animlanabilir. Bir
kez olutuktan sonra bu kurallar birden
ok uy gulama t araindan kullanilarak
daha tut arli bir veri y netimi s aglanir.
Ayrica bir onksiyonelligin degimesi
ihtiyaci dogdugunda her uygulama iin
degiiklik y apmak y erine, s adece bir
platormda degiiklik yapilir.
2. 1um prosedurler ustun perormansla
aliir ancak birden azla alitirilacak
olan prosedurler s orgulama planlari
procedure t amponcache i inde s aklan-
digindan daha da hizli aliirlar.
l. Stored Procedure`ler SQL Server start
ettikten sonra otomatik olarak alitiril-
mak uzere ayarlanabilirler.
1. Stored P rocedure`ler harici olarak
kullanilirlar. 1rigger`lardan arkli olarak
prosedurler uy gulama t araindan y a da
script t araindan bir ekilde agrilmak
zorundadirlar. Otomatik devreye gire-
mezler.
5. Stored P rocedure`lerin i inde S QL
sorgulama diline ek olarak 1 -SQL
komutlarini kullanabiliriz.
6. Kullanicinin bir t abloya eriim i zni
olmasa bile o t ablo u zerinde i lem
yapan bir st ored procedure`u kullanma
izni olabilir.
SP oIuturma:
CREATE PROC [ EDURE ] procedure_name
[ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [
OUTPUT
] ]
[ ,...n ]
rnek 27:
alitirildigi tarih itibariyle, aldigi kitap-
lari getirmeyen uy elerin adini-soyadini
veren bir SP yazalim:
CREATE PROCEDURE sp_cezaliUye
AS
DECLARE @buGun DATETIME
SET @buGun = GetDate()
SELECT uye.Adi,uye.soyadi
FROM odunc INNER JOIN uye ON uye.UyeNo
= odunc.UyeNo
WHERE geldiMi=0 AND VermeTarihi + Ver-
meSuresi < @buGun
GO
--
>>The command(s) completed
successfully.
Daha sonra bu SP u komut ile ag-
rilir:
EXEC sp_cezaliUye
{Resim 16)
50 Y7 Veritaban ProgramIama 2
rnek 28:
En ok yapilan hata, bir SP`nin a g-
rilma kodunu da yanlilikla SP ile birlikte
derlemektir. Aagida yanli yazilmi bir sp
yer almaktadir. Dogru go` iadesi sizce
nereye konmali
CREATE PROCEDURE sp_cezaliUye
AS
DECLARE @buGun DATETIME
SET @buGun = GetDate()
SELECT uye.Adi,uye.soyadi
FROM odunc INNER JOIN uye ON uye.UyeNo
= odunc.UyeNo
WHERE geldiMi=0 AND VermeTarihi +
VermeSuresi < @buGun
--go burada yer almali
EXEC sp_cezaliUye
SP stnde degiikIik yapmak:
sp_helptext sp_adi
Sp_helptext sp_cezaliUye
dersek: {Resim 17 )`de ki sonu elde
edilir.
Daha sonra bu ierigi Query Analyzer
kod penceresine yapitirip, CREA1E
yerine AL1ER yazarsak:
ALTER PROCEDURE sp_cezaliUye
AS
DECLARE @buGun DATETIME
SET @buGun = GetDate()
SELECT uyeAdi FROM odunc
WHERE geldiMi=0 AND VermeTarihi +
VermeSuresi < @buGun
--
>> The command(s) completed
successfully.
SP`nin yeni halini kaydettirebiliriz.
Bir SP`yi SiImek:
Bir sp`yi artik kullanmayacagimiza
karar verdigimizde silmemiz gerekir. Bu
durumda u komut ile silinir:
DROP PROC sp_adi
go
rnek 29:
Oluturdugumuz sp`yi silmek iste r-
sek:
DROP PROC sp_cezaliUye
Go
--
>>The command(s) completed
successfully.
SP`ye Parametre YoIIama:
Bazen SP`ler diaridan parametre alabi -
lirler:
rnek l0:
Herhangi bir tarih verildiginde, bu tarihte
suresi bittigi halde teslim edilmeyen
PUCU:
8ir SP'nin bittigi yerde go deyimini
kullanmak, sp'nizin bittigi yeri tam
olarak belirtmenizi saglayacagindan
istemediginiz ko dlarin s p ile bir
likte derlenmesine ve istenmeyen
hatalar meydana getirmesine engel
olur.
Pesim 17
Veritaban ProgramIama 2 Y7 51
kitaplari bulan bir SP yazalim ancak
tarih olarak bu gunden daha buyuk bir
parametre alamasin. Byle bir durum
oldugunda, bu gunun tarihini versin.
CREATE PROCEDURE sp_cezaliUye_1
@referansTarih DATETIME
AS
DECLARE @buGun DATETIME
SET @buGun = GetDate()
IF @referansTarih > @buGun

SET @referansTarih = @buGun
SELECT uye.Adi,uye.soyadi
FROM odunc INNER JOIN uye ON uye.UyeNo
= odunc.UyeNo
WHERE geldiMi=0 AND VermeTarihi +
VermeSuresi < @referansTarih
Bazen diaridan gelen parametr e-
lerin istege bagli olmasi istenebilir. Bu
durumda DEFAUL1 deger atama
seenegi kullanilir. ayet diaridan par a-
metreye deger atanmazsa, geerli deger
deault atanmi deger olarak alinir ve
ilem yapilir:
rnek l1:
CREATE PROCEDURE sp_cezaliUye_2
@referansTarih DATETIME = NULL
-- diaridan referans tarihi gelmedi
ise, NULL olarak kabul et.
AS
DECLARE @buGun DATETIME
SET @buGun = GetDate()
IF (@referansTarih IS NULL) OR
(@referansTarih>@buGun)
SET @referansTarih = @buGun
SELECT uye.Adi,uye.soyadi
FROM odunc INNER JOIN uye ON uye.UyeNo
= odunc.UyeNo
WHERE geldiMi=0 AND VermeTarihi +
VermeSuresi < @referansTarih
Go
eklinde yazabiliriz. Daha sonra
EXEC sp_cezaliUye_2
@referansTarih='06.20.2003'
--
>>(H SONU DNMEYECEKTR)
EXEC sp_cezaliUye_2
diyerek sp'yi agirabiliriz.
rnek l2:
Kitaplar tablosu ustunde aagidaki par a-
metrelere gre arama yapabilecek bir SP
yazalim. Parametrelerden gelenler iin
iltreleme yapilsin.
Diaridan alinabilecek Parametreler:
ISBNNo, KitapAdi, Ozeti {Resim 18)
ALTER PROCEDURE sp_kitapBul
@ISBNNo CHAR(16) =NULL,
@KitapAdi VARCHAR(55)=NULL,
@KitapOzeti VARCHAR(55)=NULL
AS
DECLARE @sSQL VARCHAR(500)
Set @sSQL= `SELECT * FROM Kitap WHERE
1=1 `
IF @ISBNNo IS NOT NULL
SET @sSQL = @sSQL + ` AND ISBNNo =
`'' + @ISBNNo + `'''
IF @KitapAdi IS NOT NULL
SET @sSQL =@sSQL + ` AND KitapAdi
LIKE `'%' + @KitapAdi + `%'''
IF @KitapOzeti IS NOT NULL
SET @sSQL = @sSQL + ` AND KitapOzeti
LIKE `'%' + @KitapOzeti + `%'''
--print @sSQL --nasil bir SQL
oluturduk?
EXEC(@sSQL)
Go
Farkli parametre degerleri ile SP'yi
agirabiliriz:
EXEC Sp_kitapBul @ISBNNo='12345'
EXEC Sp_kitapBul @ISBNNo='12345',
@kitapAdi='Yol'
...

8ir ok i;lemi kod yazmaksizin yap


mayi saglayan Enterprice Vanager'i
kullanarak sp'leri de kolayca degi;
tirebilirisiniz. 8unun iin Enterprice
manager ile bir sp'yi seip ift tik
lamak yeterlidir.
52 Y7 Veritaban ProgramIama 2
Bir sp, baka bir sp`yi agirabilir.
Sp`den Deger Dndrme:
OU1PU1 opsiyonu baka bir prosedure
deger dndurmeye y arar. Yani bir pro-
sedur kendisini agiran baka bir pro-
sedure kendi u rettigi bir ikti degerini
yanit olarak verebilir.
rnek ll:
adet t amsayi girildiginde ortalamala-
rini hesaplayip, OU1PU1 parametresi
ile dndurecek bir sp yazalim:
CREATE PROC ortalayici
@sayi1 smallint,
@sayi2 smallint,
@sayi3 smallint,
@sayi4 smallint,
@sayi5 smallint,
@ortalama smallint OUTPUT
AS
SELECT @ortalama = (@sayi1 + @sayi2 +
@sayi3 + @sayi4 + @sayi5) / 5
GO
u prosedrn dondr-
dg sonucu nastI aIabiIi-
riz!
Bu prosedurdeki ortalama degerini ala-
bilmek iin ncelikle bir degiken tanim-
layip sonra proseduru alitirabiliriz.
rnek l1:
Output olarak tanimli parametre rnek-
`te en s on parametredir. Daha nce
tanimladigimiz degikeni buraya verir-
sek bu degikende SP`nin urettigi deger
dndurulecektir. Degeri grmek i in
daha sonra SELEC1 komutunu aliti-
riyoruz. {Resim 19)
DECLARE @sonuc smallint
EXEC ortalayici 1,2,11,20,21,@sonuc
OUTPUT
SELECT `ORTALAMA:',@sonuc
go
Prosedurden deger dndurmek i in
bir baka s eenek olarak RE1URN i a-
desi kullanilabilir. Bu ekilde OU1PU1
iadelerini hem prosedur i inde hem
Pesim 18
0KKAT:
SP'de bir parametre iin default
deger tanimi yaparken, bu degerin
sabit bir deger ve ya NULL o lmasi
gerektigine dikkat etmelidir.
Veritaban ProgramIama 2 Y7 53
de prosedurun agrildigi y erde t anim-
lamak zorunda kalinmadan dogrudan
deger dndurulebilir. Normal olarak
SQL Server 0 i le --- arasinda degerleri
bu ekilde dndurebilir. Bu degerler,
sistem bazli durumlari belirlemek uzere
ayrilmi kodlardir. Ornegin sii r degeri
prosedurun alimasinda bir hata olu-
madigini belirtir. Bu haliyle de elbette
kullanici t araindan da kullanilabilir.
Digerleri is e muhteli hata durumla-
rinda kullaniciyi uy armak i in kullani-
lirlar veya SQL Server`in i leri surumle-
rinde kullanilmak u zere ayrilmilardir.
Kullanici, RE1URN i le bunlar haricin-
deki ( -1 i la --- haricindeki) degerleri
dndurebilir.
rnek l5:
CREATE PROC toplayici
@toplayan smallint,
@toplanan smallint,
@toplam smallint
AS
SELECT @toplam = @toplayan + @toplanan
RETURN @toplam
go
Prosedr oluturduktan sonra
aagidaki ekilde dnen sonucu
yakalayabiliriz:
DECLARE @toplamlar smallint
EXEC @toplamlar = toplayici 1,11,0
SELECT `Sonu : `, @toplamlar
{Resim 20)
rnek l6:
Bir kitap dun verilmek ist endiginde,
bu kitabi ncelikle ieride mi diye kont-
rol eden bir sp yaziniz. Girdi parametre:
KitapNo
Daha s onra dun verilen kitap n o,
tarih, uye No , kalma suresi verildiginde
bu kitap diarida degil ise yeni bir dun
verme ilemi balatan (odunc t ablosuna
kayit ekleyen) bir sp yaziniz.
Sizce byle bir s p hatali bir kayit
girilme i htimalini kkten halleder mi
(1abloya hatali kayit girilmemesi i in
onu her ynu ile korur mu)
Oncelikle, Kitaplarin durumunu
kontrol eden SP`yi oluturalim: kitap
0KKAT:
8azi durumlarda, SP ierisinde SQL
ifadesini bir degi;kene ata mak
suretiyle durumlara gore dinamik
olarak meydana getirip, daha sonra
da onu ali;tirabiliriz. 8u durumda
da EXE C ko mutu ku llanilir. EXE C
komutunun ba;ka nere lerde ku l
lanildigini o grenmek iin yardim
menusunu kullanabilirsiniz.
Pesim 1
Pesim 20
54 Y7 Veritaban ProgramIama 2
ierde is e 1, degil is e 0 dnduruyor.
{Resim 21)
CREATE PROC sp_kitapIcerdeMi
@kitapNo SMALLINT
AS
declare @sonuc INTEGER
IF (SELECT COUNT(*)
FROM odunc
WHERE kitapNO=@kitapNo AND geldiMi=0
) > 0
SET @sonuc=0
else
SET @sonuc=1
return @sonuc
go
Sonra da dn bilgisini kaydedecek
sp'yi yazalim:
CREATE PROC sp_oduncVer
@kitapNo INT,
@vermeTarihi DATETIME ='01.01.2003',
@uyeNo INT,
@vermeSuresi INT = 15
AS
declare @sonuc SMALLINT
EXEC @sonuc=sp_kitapIcerdeMi @kitap
No=@kitapNo
IF (@sonuc=1)
BEGIN
print `ierde.....'
INSERT INTO odunc(kitapNo,UyeNo,
VermeTarihi,vermeSuresi,geldiMi)
VALUES(@kitapNo,@uyeNo,@vermeTarihi,@-
vermeSuresi,0)
END
ELSE
BEGIN
print `kitap diarda dn
verilemedi.....'
END
Go
Test etmek iin:
EXEC sp_oduncVer @kitapNo=1,
@vermeTarihi='01.01.2003',@uyeNo=1
rnek l9:
SQL Server`in perormansini i zleyip
perormans istatistiklerini alalim:

SP'yi 7TYS Uzayi 0i;indan V0ACs ile agirmak
8ir sp'nin ASP uygulamasindan, ASP.NET uygu
lamasindan, herhangi bir programlama dili
ile yazilmi; veritabani uygulamasindan para
metre ile agrilmasi mumkundur ve aynen
yukaridaki ;ekillerde agrilir. 8u durumlarda
veritabanina eri;mek iin V0ACs (A00, 0LE
08,008C,A00.NET vs.) iin kullanilir.
EXEC sp_adi [@parametre=deger,...n]
8oylelikle, TSQL'in avantajlarini 7TYS
uzayinin di;inda bir uygulamadan da kulla
nabiliriz. 8urada anlatilan kodlari anlayabi l
mek iin 78 ScriptASP veya ASP.NET78.NET
bilmeniz gerekecektir. 8u konular, takip
eden kitapiklarda ozet olarak yer almakta
dir. Ancak bu sure ierisinde 7TYS uzayinin
di;indaki uygulamalardan SP agirmak iin bu
ornekleri kullanabilirsiniz.
0rnek J7:
;te cezali uyelerimizi Web'de te;hir
edecek bir ASP78Script kodu:
0rnegi daha iyi anlamak iin daha once
ornekte olu;turdugumuz sp_cezaliUye SP'sinin
tanimina bakiniz.
<html>
<head>
<title>ABC ktphanesi</title>
<meta http-equiv=Content-Type
content=text/html; charset=
windows-1254>
Veritaban ProgramIama 2 Y7 55
</head>
<body bgcolor=#FFFFFF
text=#000000>
<%
response.write CEZALI YELERMZ<br>
set objConn = Server.CreateObject(ADODB.Connection)
objConn.Open DRIVER={SQL Server}; _
server=BILISIMCI;UID=yasar; _
PWD=yasar;Database=dbKutuphane
strGlobSQL=EXEC sp_cezaliUye
set rsCezaliUye = objConn.Execute(strGlobSQL)
DO UNTIL rsCezaliUye.EOF
response.write rsCezaliUye(adi) & _
& rsCezaliUye(soyadi) & <br>
rsCezaliUye.MoveNext
LOOP
%>
</body>
</html>
0rnekJ8:
;te ayni i;lemi yapacak ASP.NET78.NET kodlari:
<%@ Page Language=VB %>
<script runat=server>
sub page_Load()
dataGrid1.dataSource=exec_sp_proc()
dataGrid1.dataBind()
end sub
`
Function exec_sp_proc() As System.Data.DataSet
Dim connectionString As string = server=BILISIMCI;user id=yasar;passwor-
d=yasar;Database=dbKutuphane
Dim objConn As
System.Data.SqlClient.SqlConnection = New
em.Data.SqlClient.SqlConnection(connectionString)
`Dim queryString As String = SELECT [Kitap].[kitapNo], [Kitap].[kitapAd
i], [Kitap].[ISBNNo], [Kitap].[sayfaSay& _ isi], [Kitap].[kitapOzeti]
FROM [Kitap]
Dim strGlobSQL=EXEC sp_cezaliuye
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlCl
ient.SqlCommand(strGlobSQL, objConn)
Dim dataAdapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.
SqlClient.SqlDataAdapter(sqlCommand)
Dim dataSet As System.Data.DataSet = New System.Data.DataSet
dataAdapter.Fill(dataSet)
Return dataSet
End Function
</script>
<html>
<head>
</head>
<body>
<form runat=server>
<asp:DataGrid id=DataGrid1 runat=server></asp:DataGrid>
<!-- Insert content here -->
</form>
</body>
</html>
56 Y7 Veritaban ProgramIama 2
sp_monitor
SP`ler hakkinda son olarak unu da bil-
memiz gerekir, SP`ler sadece select ilemi
iin kullanilmaz. INSER1, UPDA1E ve
DELE1E ilemlerinin t amamini SP`ler
araciligiyla yapmak, veritabanini uygula-
madan izole etmek iin iyi bir yntemdir.
{Resim 22)
Cursor'Ier
V1YS`deki cursor`lar metin editrlerin-
deki cursorler i le ayni ii y apar, metin
editrlerinde o an i in cursor n erede
ise, oradaki verileri baz alan i lemler
yapabilirsiniz. V eritabani sist emlerinde
ise, cursor`un bulundugu yerdeki verileri
yazdirabiliriz.
SQL s orgularinin s onucunda elde
edilen kayitlarin t amamina resultset
denir. Bazen bir resultset ustunde gezin-
memiz gerekebilir. Bu tur durumlarda,
Cursor`leri kullaniriz. Curserler zetle
bir select i adesinin dndurdugu result-
set`e satir satir erimeye olanak verir.
Cursor`leri kullanmak biraz karma-
ik gibi gelebilir ama normalde adimlik
ardiik ilemler dizisinden ibarettir.
1. Cursor bir SELEC1 i adesi i in
tanimlanir.
!. Cursor veriler uzerinde gezinilmek
uzere, OPEN komutu ile ailir.
. R esultset`in s onuna gelinceye
kadar her seerinde bir kayit olmak uzere
FE1CH NEX1 komutu i le kayitlar
ustunde ilerlenir.
!. R esultset i le i lgili i lemler s ona
erdiginde cursor CLOSE i le kapatilir.
Ancak kapatilan cursor henuz haizada
yer kaplamaya devam eder.
. Cursor i le i lgili i lerimiz bittigi
anda haizadan da si lmek i in cursor
DEALLOCA1E ile haizadan boaltilir.
rnek 10:
Kitaplar listesini ekrana y azdiracak(re-
sultset olarak degil de t eker t eker) bir
kod parasi yazalim:
1.Cursor tanimIanir:
DECLARE cursor_adi CURSOR FOR
SELECT FADES
eklinde tanimlanir.
DECLARE cr_kitapListesi CURSOR FOR
SELECT kitapNo, kitapAdi
FROM Kitap
GO
2.Cursor aiIir:
OPEN cursor_adi
OPEN cr_kitapListesi
GO
l.Cursor stnde doIamak iin
FETCH komutundan faydaIaniIir:
Pesim 22
Veritaban ProgramIama 2 Y7 57
FETCH NEXT FROM cursor_adi [INTO
icine_doldurulacak_degisken1 [, ....]
]DECLARE @kitapNo INTEGER,@kitapAdi
VARCHAR(55)
FETCH cr_KitapListesi INTO @kitapNo,
@kitapAdi
-- ilk satirin stne geldik ve ilk
kayitta yer alan iki degeri yazdirdik.
print @kitapNo
print @kitapAdi
go
FE1CH komutu ile ikinci kaydi yaz-
dirmayi deneyin.
Cursor`un s ona gelip gelmedigini
anlamak i in __FE1CH_S1A1US
ve __rowcount global onksiyonlarin-
dan aydalanacagiz:
__FE1CH_S1A1US onksiyonu,
en son alitirilan FE1CH komutunun
sonucu hakkinda bize bilgi verir. Bu
onksiyon, u u degerden birini vere-
cektir:
0: Bir nceki FE1CH komutu baari
ile gerekletirildi.
-1: Bir nceki FE1CH komutunda
bir hata ile karilaildi.
-2: R esultsetteki tu m kayitlar bittigi
iin en sona gelindi, daha azla kayit yer
almiyor. (end o resultset)
__rowcount, bir nceki FE1CH
komutu i cra edildikten sonra resultsette
toplam ka kayit kaldigini tut ar. Hi
FE1CH komutu kullanilmadi ise Cur-
sor`un iaretledigi resultsette toplam ka
kayit yer aldigini gsterir.
imdi artik, kitaplar listesini s onuna
kadar yazdirabiliriz. Bu i i in WHILE
yapisini kullanacagiz:
DECLARE cr_KitaplarListesi CURSOR FOR
SELECT kitapNo,KitapAdi
FROM Kitap
go
DECLARE @kitapNo INTEGER,@kitapAdi
VARCHAR(55)
Go
FETCH cr_KitaplarListesi INTO
@kitapNo, @kitapAdi
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @kitapNo
PRINT @kitapAdi
bir nceki FE1CH i le aldigimiz
kaydi y azdirdik. Bir s onraki kayda
geelim:
FETCH cr_kitaplarListesi INTO
@kitapNo, @kitapAdi
kayitlarimizi doldurduk. Baa dn-
dugunde yazilacak.
END
Go
Kitaplar listesini y azdiran cursor i le
bizim iimiz bitti ancak yapmamiz gere-
ken ilemler bitmedi.
1.Cursor`i kapatmamiz gerekiyor:
CLOSE cursor_adi
CLOSE cr_kitapListesi
CLOSE komutu i le s adece bir cur-
sor`un ierdigi resultset boaltilir. Ancak
Cursor i in haizada ailan y er halen
kullanimdadir ve bir cursor haizadan
tam olarak silinmedigi surece ayni adda
baka bir cursor daha oluturulamaz.
Cursor y eniden ailirsa, ayni resultsete
en batan eriilebilir.
5. Cursor u ekiIde hafizadan siIinir:
8a||ca !|stem !ak||
|rese6r|er|
|||'e eae||| :|.tem .j'|er|.
.j_ +aatje
.j_lere|a|e
.j_jr|m+r|e
.j_|e|j
.j_|e|jte\t
.j_|e|ja|
.j_|e|jcea.tr+|at
.j_rea+me
.j_.j+cea.ea
.j_aejeaa.
.j_arej|e
.j_rea+me
.j_a|reme.e
.j_rea+mea|
.j_|e|jtr|er
|a||+a|c| I+a|m|| Me.+j :|.tem .j'|er|.
.j_+aame..+e
.j_arejme..+e
.j_etme..+e
.j_+|terme..+e
58 Y7 Veritaban ProgramIama 2
DEALLOCATE cursor_adi
DEALLOCATE cr_kitapListesi
{Resim 2l)
rnek 11:
Projelerin eitli aamalarinda, zel-
likle de diaridan veri alinirken, bazi
kayitlarin bire bir t ekrarladigi olabilir.
Bu durumda kayitlardan s adece birini
birakip digerlerini si lecek bir Cursor
oluturmak gerekir. Varsayalim ki bizim
de kitap tablomuz ustunde hibir indeks
alan y oktu ve i ki- u kere ayni bilgiler
tekrarladi. (Hatta bazi kitaplar !, diger-
leri digerleri n kere ...)Bunlari si lecek
bir Cursor oluturalim:
DECLARE cr_kitapDurumu CURSOR FOR
SELECT kitap.kitapAdi,odunc.GeldiMi
FROM Kitap
LEFT JOIN odunc ON odunc.KitapNo=Kit-
ap.KitapNo
DECLARE @kitapAdi VARCHAR(25), @Durumu
BIT
open cr_kitapDurumu
FETCH NEXT FROM cr_kitapDurumu INTO
@kitapAdi, @Durumu
WHILE @@FETCH_STATUS =0
BEGIN
print @kitapAdi
IF @Durumu = 0
print `diarida'
ELSE
Print `ieride'
FETCH NEXT FROM cr_kitapDurumu INTO
@kitapAdi, @Durumu
END
GO
Close cr_kitapDurumu
Deallocate cr_kitapDurumu
{Resim 21)
rnek 12:
Kitaplar tablosunda ayni kitap numara-
sindan i ki t ane olan varsa si ldirecek bir
cursor yazalim:
SET ROWCOUNT 0
DECLARE @kitapNo INTEGER, @tekrarSa-
yisi INTEGER, @sayac BIT
DECLARE crKitaplar CURSOR FOR
SELECT kitapNo, COUNT(kitapNo)-1
FROM Kitap
GROUP BY kitapNo
HAVING COUNT(kitapNo)>1
ORDER BY kitapNo
--kitapNo bir kereden fazla geenleri
silecegimize gre
--dogru kitap numaralarini seelim:
OPEN crKitaplar
FETCH NEXT FROM crKitaplar INTO
@KitapNo, @tekrarSayisi
WHILE @@FETCH_STATUS=0
BEGIN
BEGIN
SET ROWCOUNT @tekrarSayisi
--tekrar sayisinin bir eksigi kadar
kayit silinecek
DELETE FROM Kitap WHERE kitapNo =
@kitapNo
--sonra tekrardan tm kayitlar
--dikkate alinacak ekilde ROWCOUNT=0
ataniyor
SET ROWCOUNT 0
END
Pesim 23
Pesim 24
Veritaban ProgramIama 2 Y7 59
FETCH NEXT FROM crKitaplar INTO
@KitapNo,@tekrarSayisi
--print CAST(@kitapNO VARCHAR(2)) + `
nolu kitap silindi'
END
close crKitaplar
deallocate crKitaplar
{Resim 25)
rnek 1l:
Saya sayisina gre ilk be kitabi grmek
iin:
SELECT TOP 5 *
FROM kitap
ORDER BY sayfaSayisi DESC
Pesim 25
PUCU:
Herhangi bir kritere gore siralandik
tan sonra ilk n kaydi getirip otesiyle
ilgilenmeyeceksek SELECT T 0P N
deyimini kullaniriz.

Veritaban ProgramIama 2 Y7 61
IemIer (Transactions)
Bir banka uy gulamasini duunun. Bir
kullanici baka bir kullaniciya havale
yaptiginda n e olur Oncelikle havale
yapanin hesap bilgilerinden havale
yaptigi miktar duulur. Ardindan ali-
cinin hesabina bu miktar eklenir ve
havale gereklemi olur. Ancak her
zaman artlar ist endigi gibi olmayabilir.
Ornegin, gnderenin hesabindan para
duuldugu anda elektrik kesilebilir y a
da program t akilabilir. Bu durumda,
ne olur Gnderenin hesabindan para
duulmutur ama Alicinin hesabina
da gememitir y ani bir kisim paranin
sahibinin kimligi kaybedilmi olur. Ya
da siz tam da bir hesaba havale yapacak-
ken, duuk bir i htimal ama arkadainiz
da ayni hesabi kapattirdi is e... Bu da
sistemin olasi durumlar diinda veri kay-
betmeye musait bir hal almasi demektir,
nlenmesi gerekir. It e 1ransaction bu
nedenle, verileri korumak i in kilitler
(LOCK` koyar)
Daha kuuk paralara ayrilamayan
en kuuk i lem yi ginina t ransaction
denir. Geerli kabul edilmesi bir dize
ilemlerin tamaminin yolunda gitmesine
bagli durumlarda t ransaction kullanilir.
1ransaction blogu ya hep ya hi mantigi
ile aliir. Ya tum ilemler duzgun olarak
gerekleir ve geerli kabul edilir veya bir
kisim i lemler y olunda gitse bile, blok
sona ermeden bir ilem bile yolunda git-
mese hibir i lem olmami kabul edilir.
1ransaction t animina girebilen i lem-
ler UPDA1E, I NSER1 ve DELE1E
ilemleridir.
Bir 1ransaction blogunu i letmenin
temel mantigi u ekildedir:
1.1ransaction blogu balatilir. Bu ilem-
den s onra gerekleen i lem loglari
iaretlenir. Bu arada i lem kullandigi
kaynaklari diger kullanicilara kari kilit-
leyerek korur.
2.1ransaction blogu arasinda yapilan her
bir ilem bittigi anda baarili olup olma-
digina bakilir, baarili olmadigi anda geri
alim i lemine geilir (R OLLBACK).
Baarili ise, bir sonraki ileme geilir.
l.1um i lemler t amamlandigi anda
COMMI1 i le bilgiler y eni hali i le
sabitlenir. Baarisiz bir sonu ise ROLL-
BACK i le en baa alinir ve bilgiler i lk
hali ile sabitlenir.
Bu rnek i in aagidaki t abloyu kul-
lanacagiz:
Hesap tabIosu
Alanlar:
HesapNo CHAR(20) NOT NULL PRIMARY KEY
Adi VARCHAR(55)
IemIer (Transactions)
TetikIemeIer (Triggers)
62 Y7 Veritaban ProgramIama 2
Soyadi VARCHAR(55)
Sube INTEGER
Bakiye FLOAT
Genel Yapisi u ekildedir:
1.Transaction baIatiIir:
BEGIN TRAN[SACTION] [transaction_adi]
Ile bir transaction balatilir.
rnek 11:
DECLARE @havaleMiktar FLOAT
DECLARE @aliciHesap VARCHAR(20), @gon-
derenHesap VARCHAR(20)
SET @aliciHesap='1'
SET @gonderenHesap='2'
SET @havaleMiktar=20000000
-- 20 milyon havale edilecek
BEGIN TRANSACTION
UPDATE tblHesap
SET bakiye=bakiye - 20000000
WHERE hesapNo=@gonderenHesap
UPDATE tblHesap
SET bakiye=bakiye - 20000000
WHERE hesapNo=@aliciHesap
2.IIem b aariIi oIursa, COMMI1
ile t ransaction bitirilir. Baarisiz oldu-
gunun anlailmasi haline ROLLBACK
komutu i le t ransaction baarisiz olarak
bitirilebilir.(Yani en bataki duruma geri
dnulur)

SabitIeme noktaIari:
Bazen, bir noktaya kadar gelindikten
sonra, ilemlerin buraya kadar olanini
geerli kabul etmek isteriz ama, bundan
sonraki ilemler iin de transaction (geri
alabilme seenegi)`ne ihtiya duyariz. Bu
turden durumlarda sabitleme noktalarin -
dan aydalanilir.
Bir sabitleme noktasi balatildigi anda,
en baa dnme seenegi sakli kalmak
uzere, noktanin oluturuldugu yere de
dnme seenegi sunar
Genel yapisi u ekildedir:
SAVE 1RANSAC1ION sabitleme _
notkasi_adi
rnek 15:
SELECT * FROM hesap
--lk bataki hesap durumlarina
dikkat:
BEGIN TRANSACTION
UPDATE Hesap
SET bakiye = 5000000
WHERE hesapNo='1'
-- transaction aildiktan sonra bir
UPDATE geldi.
--Yeni Durum:
SELECT * FROM hesap
SAVE TRANSACTION svp_kaydet
DELETE FROM Hesap
WHERE HesapNo='1';
--Kaydetme noktasindan sonra bir nolu
hesap silindi
--yeni durum:
SELECT * FROM hesap
ROLLBACK TRAN svp_kaydet;
--kaydetme noktasina dnld(Silinene
hesap geri geldi)
SELECT * FROM Hesap;
ROLLBACK TRAN ;
--te son durum(havale geri alindi,
her ey ilk haline geldi.)
SELECT * FROM Hesap;
rnek 16:
Veritaban ProgramIama 2 Y7 63
Kitap tablosu ustunde kilitlemeden seme
ilemi yapmak iin:
SELECT kitap.*
FROM kitap WITH(NOLOCK)
WHERE kitapNo>5
Trigger'Iar
1riggers (1etikler), aslinda zel bir Stored
Procedure`dur. SP`lerden arki, bir tablo
ustunde
UDA1E , INSER1, DELE1E komut -
lari ile bir ilem yapilmak istendiginde, ilk
olarak bu SP`lere bakilmasi ve gerekli ise
alitirilmasidir.
Nesneye dayali Programlamada var
olan, event based programlama bu mantik
ile rtuur.
1rigger`lar izin verilmeyen ya da tutar-
sizliga neden olacak ilemleri engelleyerek
veri butunlugunun korunmasina yardimci
olurlar. Daha nceki veritabani sisteml e-
rinde triggerlar tablolar arasi birbirlerine
reerans yapan verilerin butunlugunu sag-
lamak maksadiyla kullanilirlardi (yabanci
anahtar zorlayicisini hatirlayiniz). Ancak
SQL Server 6.` dan itibaren bu ilem
zaten Reerantial Integrity tanimlamal a-
riyla saglandigi iin bu maksatla kullani l-
malari gereksizdir.
1riggerlar genellikle degiik tablolar
uzerinde bulunan ve birbirleri arasinda
mantiksal ilikilere sahip verilerin tuta r-
liligini saglamak uzere oluturulurlar.
Ihtiyaca gre uygulamanin getirdigi bazi
kurallari kontrol etmek iin de kullanil a-
bilirler.
Genel kullanimi:
CREATE TRIGGER trigger_adi
ON tablo_adi
FOR INSERT [,UPDATE,DELETE]
AS
SQL ifadesi
eklindedir.
1rigger`lerin bir UPDA1E, INSER1
veya DELE1E komutuna cevap olarak
alimasi, 1ransaction mantigi ile aynidir:
Bir tablo iin 1RIGGER tanimli ise
INSER1, DELE1E veya UPDA1E
ilemi balamadan hemen nce bir 1ran -
saction balatilir.
INSER1, DELE1E veya UPDA1E
komutu yerine getirilir.
1rigger agrilir ve iindeki SQL iadesi
alitirilir.
1rigger ilemi onaylarsa geerli kilar
veya onaylamaz ve geersiz bulur. 1ran -
saction geri alinir. (ROLLBACK 1RA N-
SAC1ION).
Bir 1rigger olutururken u durumlara
dikkat etmek gerekir:
View ya da geici tablolar uzerinde
oluturulamazlar. Fakat bunlara reerans
UYAPI:
Pecursive o larak ali;mazlar. Yan i
bir tablonun herhangi bir sutununda
yapilan degi;iklik uzerine bir trigger
ali;ip ayni tablonun ba;ka bir sutu
nunda degi;iklige ne den o luyorsa
ikinci yapilan degi;iklik trigger iin
tetiklenmeye ne den o lmaz. K isaca
update trigger'i tekrar tekrar ali;
maz, yalnizca bir kez ali;ir.
64 Y7 Veritaban ProgramIama 2
ierebilirler.
2. alitiktan sonra bir kullaniciya deger
kumesi dnduremezler. Dolayisiyla
SELEC1 iadesi dahil edilecegi zaman
dikkatli olunmalidir.
l. Veri butunlugunu, arkli tablolardan
birbirine reerans yapan verilerin tutarlili-
gini saglamak iin ve uygulamanin ihtiya-
cina gre bazi kurallari tanimlamak uzere
kullanilabilirler. Ancak zorlayicilarla
duzenlenebilecek trigger kullanmamak
daha aydalidir.
1. Istenirse syscomments tablosunda ire-
lenmi tekilde saklanabilirler.
5. CREA1E, DROP, AL1ER 1ABLE,
AL1ER DA1ABASE, SELEC1 IN1O
gibi iadeler trigger iinde kullanilmazlar.
rnek 17:
Odun tablosundaki kayitlar ustunde
degiiklik yapildiginda ka kaydi etkiledi -
gini yazan bir trigger oluturalim:
CREATE TRIGGER tr_AffectedRows
ON odunc
FOR INSERT, UPDATE,DELETE
AS
raiserror(`%d kayit zerinde degiiklik
yapilmitir', 0, 1, @@rowcount)
RETURN
Ardindan odunc iin
DELETE FROM ODUNC WHERE oduncNo=8
Gibi bir cumlecik alitirdigimizda,
Mesaji gelir.
EkIenen-SiIinen KayitIar:
1riggerlar alitigi zaman Inserted ve
Deleted tablolarini kullanirlar. Bu tablola-
rin her ikisi de ana tabloyla yani triggerin
tetiklendigi tabloyla edeger alanlara
sahiptirler. Bu tablolar, mantiksal tablo
eklinde RAM` de bulunurlar. Ana tabloya
bir kayit eklendigi zaman bu kayit ayni
zamanda inserted tablosuna da eklenir.
Ihtiyacimiz oldugu zaman yeni eklenen
degerlere bu tablodan ulaarak, bu bilgileri
tutmak maksadiyla degiken tanimlamak
zorunda kalmaktan kurtuluruz. 1ablodan
bir kayit silindiginde silinen kayit deleted
tablosunda saklanir. Update ilemi ise
delete ve hemen ardindan yapilmi bir
insert ilemi olarak ele alinir. Bir kayit
update edildiginde orijinal kayit deleted
tablosuna ilenir, degien kayit da inserted
tablosunda (ve ana tabloda) saklanir.
1rigger`lere diaridan parametre yolla-
yamayiz. Ancak, INSER1ED ve DELE -
1ED tablolari sayesinde kisitli da olsa,
son ilemden etkilenmekte olan kayitlari
tespit edebiliriz.

Cenellikle bir ta blo iin en faz la


UP0ATE,NSEPT ve 0ELETE tr igger'i
olmak uzere J Tr igger ku llanilir.
Yapilacak bir ok i; varsa , han gi
olay ile birlikte tet iklenecekse o
trigger ierisinde yerle;tirilir.
Veritaban ProgramIama 2 Y7 65
rnek 18:
Kitaplardan bir kismi, dun verildigi
ve gelmedigi halde bir bakasina daha
dun verilmi grunebiliyor. Byle bir
hata yapilmasini kkten zmek iin bir
1rigger oluturalim:
CREATE TRIGGER tr_oduncKontrol
ON odunc
FOR INSERT,UPDATE AS
IF(SELECT COUNT(odunc.kitapNo) FROM
odunc,inserted WHERE odunc.geldiMi=0
AND inserted.kitapNo=odunc.KitapNo)>1
BEGIN
Print `diaridaki kitabi bir bakasina
veremezsiniz..'
ROLLBACK TRANSACTION
END
Bu rnekte verilen durumun ierisin -
den oreign key zorlayicisi ile ikilamay a-
cagina dikkat edin.
imdi odunc ustunde yle bir cuml e-
cik alitiralim (1 nolu kit ap dun veri l-
mi ve gelmemi ise):
INSERT INTO odunc(kitapNo,uyeNo,
vermeTarihi,VermeSuresi,GeldiMi) VALUE
S(1,1,'01.01.2003',15,0)
--
>> diaridaki kitabi bir bakasina
veremezsiniz..
mesaji gelecektir.
1rigger`ler, uygulamaya zgu kurallari
veritabani sisteminin bir parasi olarak
tayin etmek istenildiginde de kullanilir:
rnek 19:
!0`den azla kez dun alinan kitaplarin
silinmesini nleyecek bir trigger yazalim:
CREATE TRIGGER tr_oduncKontrol_20
ON odunc
FOR DELETE
AS
IF(SELECT COUNT(odunc.kitapNo) FROM
odunc,inserted WHERE odunc.geldiMi=0
AND inserted.kitapNo=odunc.KitapNo)>20
BEGIN
Print `Bu kitabi 20''den fazla defa
dn vermisiniz. Ktphaneden
ikaramazsiniz.'
ROLLBACK TRANSACTION
END
rnek 50:
Odun tablosu ustunde hangi trigger`lerin
bulundugunu grenmek iin gerekli 1 -
SQL komutunu yazalim:
sp_helptrigger odunc
Sonuta 1rigger ve Stored Procedu -
re`leri karilatirirsak, her ikisi de nceden
derlenmi SQL iadeleri oldugundan
hemen hemen ayni hizda ve ayni kulet
miktarina sahiptirler. SQL Server` iin
ilem sirasi, nce View ve Stored Proc e-
dure` le rii sonra 1rigger`lari alitiracak
ekildedir. Daha iyi perormans elde
etmek iin mumkun oldugu kadar trigger
seviyesine inilmemeye gayret edilmelidir.
Eger problemi,Zorlayicilar seviyes ainde
yakalayabiliyorsak bu seviyede, stored
procedure iinde yakalayabiliyorsak sp
seviyesinde o da olmuyorsa, trigger seviye-
sinde yakalamak gerekir. Sp ile yakalanan
bir durum oldugunda, trigger yuzunden,
yapilan her eyin geri alinmasi gerekmez.
Ancak SPsp`lerin otomatik devreye girme-
digini unutmamak gerekir.

You might also like