Bölüm 7: Microsoft Transact - SQL -113-
Transkript
Bölüm 7: Microsoft Transact - SQL -113-
Bölüm 7: Microsoft Transact - SQL -113- Dr. Serkan DİŞLİTAŞ 7.1. Transact – SQL (T-SQL) Microsoft Transact-SQL ya da kısaca T-SQL, Microsoft Server için özel yetenekleri olan SQL dilidir. T-SQL ile SQL cümleleri yazılırken değişkenler, karar ve çevrim kontrolleri, tetikleyiciler, saklı yordamlar gibi yapılar da kullanılmaktadır. 7.2. Operatörler Operatörler bir veya daha çok veri üzerinde işlem yapılmasını sağlayan yapılardır. 7.1.1. Aritmetiksel Operatörler Operatör + * / % + - Açıklama Toplama Çıkarma Çarpma Bölme Modüler Bölme İşaret Pozitif İşaret Negatif 7.1.2. Karşılaştırma Operatörleri Operatör = > >= < <= <> Açıklama Eşit Büyük Büyük Eşit Küçük Küçük Eşit Farklı 7.1.3. Mantıksal Operatörler Operatör Not And Or -114- Açıklama Değil Ve Veya Bölüm 7: Microsoft Transact - SQL 7.1.4. Bitsel (Bitwise) Operatörler Operatör ~ & | ^ Açıklama Bitsel Not Bitsel And Bitsel Or Bitsel Ex-Or 7.1.5. Diğer Operatörler Operatör = + -/* ….. ….. */ Açıklama Atama Birleştirme Açıklama Grup Açıklama 7.1.6. Operatör Önceliği Genellikle diğer programlama dillerinde olduğu gibi Transact-SQL’de de operatörlerin işletilmesinde belirli bir öncelik sırası vardır. Bu durum genellikle karmaşık ifadelerde ön plana çıkmaktadır. Aynı önceliğe sahip operatörlerde, işletim soldan sağa gidilerek yapılmaktadır. Öncelik 1 2 3 4 5 6 7 8 9 Operatör +, -, ~ *, / , % +,= , >, >=, <, <=, <> ^, & , | Not And Or = Açıklama İşaret , Bit Yapısında Değil Çarpma, Bölme, Mod Bölme Toplama, Çıkarma Karşılaştırma Bit Yapısında Ex-Or, And, Or Mantıksal Değil Mantıksal Ve Mantıksal Veya Atama Operatörü -115- Dr. Serkan DİŞLİTAŞ 7.3. Veri Tipleri Veritabanındaki tablo ve değişkenlerde tutulan verilerin ne tipte ve ne büyüklükte olacağını belirlemek amacıyla veri tipleri kullanılmaktadır. Veri tipleri üç ana sınıf altında toplanabilmektedir : Sayısal Veri Tipleri, Karakter Veri Tipleri Zaman Veri Tipleri Sayısal Veri Tipleri Veri Tipi Açıklaması Sınır Aralıkları Int Tamsayı 4Byte (İşaretli-İşaretsiz) TinyInt SmallInt MediumInt BigInt Float Double/Real Decimal Tamsayı Tamsayı Tamsayı Tamsayı Tek hassasiyetli Floating Point Cift hassasiyetli Floating Point Float, ASCII Karakter olarak 1Byte (İşaretli-İşaretsiz) 2Byte (İşaretli-İşaretsiz) 3Byte (İşaretli-İşaretsiz) 8Byte (İşaretli-İşaretsiz) +- 1.176x10-38 den +-3.403x1038 +-2.225x10-308 den +-1.798x10308 +-2.225x10-308 den +-1.798x10308 Karakter Veri Tipleri Veri Tipleri Char VarChar Blob TinyBlob MediumBlob LongBlob Text TinyText MediumText LongText Enum Set -116- Açıklama Sabit Uzunluklu String Değişken Uzunluklu String BLOB : Binary geniş nesne BLOB BLOB BLOB Text Text Text Text Siralamak Deger Ayarı Sınır Aralıkları 0-255 Karekter 0-255 Karekter Binary veri 0-65535 byte uzunlukta Binary veri 0-255 byte uzunlukta Binary veri 0-16777215 byte Binary veri 0-4294967295 byte 0-65535 byte 0-255 byte 0-16777215 byte 0-4294967295 byte Sütun değerleri listeden alınan bir değer olmalı. Sütun değerleri sıfır veya listeden bir değer ol. Bölüm 7: Microsoft Transact - SQL Zaman Veri Tipleri Veri Tipi Açıklaması Formatı Date DateTime TimeStamp Time Year Tarih Tarih +Zaman Zaman Parçası Saat Yıl YYYY-AA-GG YYYY-AA-GG ss:dd:ss YYYYAAGGssddss ss:dd:ss Yyyy Bir alan Char ile tanımlandığında boyuta bağlı olarak girilen verilerin sağ tarafları boşluk ile doldurulur. VarChar ile tanımlandığında ise girilen verinin 1 karakter fazlası yer ayrılacaktır. Bu 1 byte da string bitişi için kullanılmaktadır. Tanımlanan boyutun tamamı veri ile dolduğunda ise fazladan 1 byte daha ekleneceğinden diskten yer kazancı da zararla sonuçlanacaktır. Veri Tipi Tanımı Ad Char (10) Sonuç ‘Z’ ‘E’ ‘K’ ‘E’ ‘L’ ‘E’ ‘Y’ ‘İ’ ‘M’ ‘N’ ‘F’ ‘A’ ‘E’ ‘’ ‘L’ ‘P’ ‘’ ‘E’ ‘’ ‘’ ‘T’ ‘’ ‘’ ‘T’ ‘’ ‘’ ‘İ’ ‘’ ‘’ ‘N’ ‘N’ Null Her zaman 10 karakter dolu ‘Z’ ‘E’ Toplam 7 karakter Ad VarChar(10) ‘Y’ ‘N’ ‘E’ ‘L’ ‘İ’ Toplam 5 karakter ‘F’ ‘K’ ‘E’ ‘M’ Toplam 11 karakter ‘A’ ‘E’ ‘P’ Null Null ‘L’ ‘E’ ‘T’ ‘T’ ‘İ’ VarChar kullanımı diskten kazanç sağlamaktadır ancak performans açısından düşüş yapacaktır. Char tipi verilerle çalışmak performansı artıracaktır ancak daha fazla yer tutacaktır. T.C. Kimlik No, Öğrenci No gibi sabit büyüklükteki verilerin girileceği alanların Char ile oluşturulması daha uygun olur. -117- Dr. Serkan DİŞLİTAŞ 7.4. Değişkenler Değişkenler, içeriği değişebilen bellek hücrelerini adresleyen yapılardır. Değişkenler sadece bir bellek gözünü adresler. Bununla birlikte, veriler bellekte birden fazla byte yer kaplayabilir. Bu nedenle verilerin, değişkenlerin tanımladığı adresten itibaren kaç byte hücreyi daha içerdiği veri tipleri sayesinde belirlenir. Bu durumda değişken, verinin bellekte yer aldığı başlangıç adresini tutarken; değişkenin veri tipi ile başlangıç adresinden itibaren kaç byte hücrenin bu veriye ait olduğu belirlenir. T-SQL’de değişkenler Yerel (Local) ve Genel (Global) olmak üzere iki türlü tanımlanır. 7.4.1. Yerel Değişkenler Kullanıcı tarafından Declare ifadesi kullanılarak tanımlanırlar ve her değişken @ özel karakteriyle başlar. Yerel değişkenler başlangıçta Null değere sahiptirler. Declare (Yerel_Değişken_Adı) (Veri_Türü) ------------------------------------------------------------------------------------------------------Yerel_Değişken_Adı : @ özel karakteriyle başlayan oluşturulacak değişkenin adı. Veri_Türü : Değişken veri tipi (char, varchar, int, date …) Örnek 1 : Declare @Numara @Sonuc Char(9), Int Burada 9 karakterli Char tipinde @Numara adında ve Int tipinde @Sonuc adında iki yerel değişken tanımlanmaktadır. Bu değişkenlerin ilk değerleri Null’dur. Örnek 2 : Declare Set @Numara Char(9) @Numara = ‘034510015’ Burada @Numara değişkenine ‘034510015’ değeri atanmaktadır. Örnek 3 : -- 9 karakterli Char tipinde @OgrNo adında yerel değişken tanımı Declare @OgrNo Char (9) -- Kimlik tablosundaki en küçük numara @OgrNo değişkene atanır. Select @OgrNo = Min(OgrNo) From Kimlik -- @OgrNo değeri sonuç (Result Set) olarak elde edilir. Select @OgrNo as [İlk Ogrenci Numarası] -- @OgrNo değeri ekrana mesaj olarak yazdır. Print @OgrNo -118- Bölüm 7: Microsoft Transact - SQL Örnek 4 : Exec ve Declare uygulaması - I Not : String ifadelerde karakter sayıları eşit olduğunda, sayısal büyüklük veya küçüklük geçerlidir. Örnek 5 : Exec ve Declare uygulaması - II -119- Dr. Serkan DİŞLİTAŞ 7.4.2. Genel Değişkenler @@ (çift) özel karakteriyle başlayan değişkenlerdir. SQL tarafından oluşturulmuşlardır ve kullanıcı tarafından yaratılamazlar. Bazı Genel (Global) Değişkenler Değişken Adı @@Version @@Language @@ServerName @@Connections @@Total_Read @@Total_Write @@Total_Errors Örnek 1 : İçeriği Versiyon bilgileri Kullanılan Dil Yerel Sunucu adı Bağlantı/Bağlantı Girişimi sayısı (Sunucunun başlatılmasında sonra) Disk Okuma Sayısı (Sunucunun başlatılmasında sonra) Disk Yazma Sayısı (Sunucunun başlatılmasında sonra) Disk Okuma/Yazma Hatası Sayısı (Sunucunun başlatılmasından sonra) Print @@Version Bu komut satırı işletilince aşağıdakine benzer versiyon bilgileri elde edilmektedir. Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Örnek 2 : print 'Server Name : ' + @@ServerName + ' - Language :' + @@language Sonuç; Server Name :DISLITAS - Language :British 6.4.3. Yerel Tablo Türü Değişkenler Tablolar geçici olacak şekilde değişken olarak tanımlanabilmektedir. Declare (Yerel_Değişken_Adı) Table (Tablo_Tanımı) ----------------------------------------------------------------------------------------------------Yerel_Değişken_Adı : @ özel karakteriyle başlayan yaratılacak değişkenin adı. Tablo_Tanımı : Normal Tablo Tanımı -120- Bölüm 7: Microsoft Transact - SQL Örnek 1 : -- Tablo Değişkeni Tanımla Declare @Gecici_Notlar Table ( OgrNo Char(9), Vize Int, Final Int, Ortalama Float ) -- Tablo değişkenine başka tablodan değer atama Insert Into @Gecici_Notlar (OgrNo) Select Ogrno From Kimlik -- Tablo Değişkenini Sorgula Select * From @Gecici_Notlar Not: @Gecici_Notlar tablo değişkeninin Vize, Final ve Ortalama alanları Null değer alır. Örnek 2: Exec (' --Tablo Degişkeni Tanımla Declare @TabloDegiskeni Table ( OgrNo Char(9), Derskodu Char(7), Durum Char(8) ) --Tablo değişkenine başka tablodan değer atama Insert Into @TabloDegiskeni (OgrNo, Derskodu, Durum) Select Numara, DersKodu, Durum From Notlar -- Tablo Değişkenini Sorgula Select * From @TabloDegiskeni ') Not : Burada Exec komutu ile SQL cümlesinin işletilmesi sağlanmıştır. 7.5. Fonksiyonlar Transact-SQL’de fonksiyonlar tanımlanmalarına, ürettikleri değerlere ve türlerine göre çeşitli sınıflara ayrılmaktadırlar. Tanımlamasına göre fonksiyonlar : - Yerleşik (Sistem Tanımlı) Fonksiyonlar - Kullanıcı Tanımlı Fonksiyonlar Ürettikleri değerlere göre fonksiyonlar : - Kararlı Fonksiyonlar : Her zaman aynı değeri verirler ( Abs (-12) ). - Kararsız Fonksiyonlar : Farklı değerler verir ( Rand ( ) ). Türlerine göre fonksiyonlar: - Gruplama (Toplama - Aggregate) Fonksiyonları - Matematiksel Fonksiyonlar - Tarih ve Zaman Fonksiyonlar - Metin Fonksiyonları - Meta Veri Fonksiyonları - Güvenlik Fonksiyonları -121- Dr. Serkan DİŞLİTAŞ - Sistem Fonksiyonları 7.5.1. Gruplama (Aggregate) Fonksiyonları Fonksiyon Görev / İşleyiş Min(Sütun) Max(Sütun) Sum(Sütun) Avg(Sütun) Count(Sütun) Sütun içerisinde en küçük değer bulunur. Sütun içerisinde en büyük değer bulunur. Sütun toplamı bulunur. (Null değerler hariç) Sütun aritmetik ortalaması bulunur. (Null değerler hariç) Sütuna göre kayıt sayısı bulunur. (Sütundaki Null değerler hariç) Count(*) StdDev(Sütun) StdDevP(Sütun) Var(Sütun) VarP(Sütun) Tablodaki kayıt sayısı bulunur. Sütuna göre standart sapma bulunur. Sütuna göre istatistiksel standart sapma bulunur. Sütuna göre Varyans bulunur. Sütuna göre istatistiksel Varyans bulunur. 7.5.2. Matematiksel Fonksiyonlar Fonksiyon Açıklama Abs(x) Cos(x) Sin(x) Degrees(x) Ceiling(x) Exp(x) Floor(x) Log(x) Log10(x) PI() Power(x,y) Radians(x) Rand( ) Round(x,y) Sign(x) X sayısının Mutlak Değeri Radyan cinsinden x sayısının, Cos değerini verir. Radyan cinsinden x sayısının, Sin değerini verir. Radyan >>> Derece X Kesirli sayıyı üst sayıya yuvarlar. ex Exponent üs değerini verir X Kesirli sayıyı alt sayıya yuvarlar. X sayısının Doğal Logaritmasını alır. X sayısının 10 tabanına göre logaritmasını alır. Pi sayını verir. X sayısının y. Kuvvetini verir. (xy ) Derece >>> Radyan Real olarak parametre ister. Örn:Radians(30.0) 0 ile 1 arası rastgele değer üretir. X sayısını y kesir hanesine yuvarlar. X sayısının işareti öğrenilir. (x sayısı negatif ise (-1), 0 ise (0) ve pozitif ise (+1) X sayısının karesini verir. X sayısının karekökünü verir. Square(x) Sqrt(x) -122- Bölüm 7: Microsoft Transact - SQL Örnek 1: 7.5.3. Tarih ve Zaman Fonksiyonları Fonksiyon Day() Month() Year() GetDate() DateAdd DateDiff DatePart Tarih Parçası Year Quarter Month DayofYear Day Week Açıklama Sistem GÜN değerini verir. Sistem AY değerini verir. Sistem YIL değerini verir. Sistem tarihini verir (Saat dahil) Tarihe ekleme İki tarih arası fark Tarihin belirli kısmının alınması Tarih Format Analizi Kısaltılmış İfade Tarih Parçası yy, yyyy qq, q mm, m dy, y dd, d wk, ww WeekDay Hour Minute Second MilliSecond Kısaltılmış İfade dw hh mi, n ss, s ms -123- Dr. Serkan DİŞLİTAŞ Örnek 1: Örnek 2: Select Ad, Soyad, Year( GetDate() ) – Year(DogTar) as Yaş From Kimlik Burada ‘Kimlik’ tablosundan Ad, Soyad ve DogTar alanları getirilmekte ve sistem tarihine ait yıl (fonksiyon değer üretimi) ile DogTar arasındaki yıl farkının elde edilmesi ile her kayıt için yaş gösterilmektedir. İlave Örnek: Select DATEDIFF (Year, '2002/07/27', GETDATE()) as Yas 7.5.4. Metinsel Fonksiyonlar Fonksiyon Ascii(x) Char(x) CharIndex(x, y) CharIndex(x, y, i) Left(x, y) Len(x) Lower(x) LTrim(x) NChar(x) Replace(x, y, z) Right(x, y) RTrim(x) Space(x) SubString(x, y, z) Unicode(x) Upper(x) -124- Açıklama X String ifadesinin sol karakterinin Ascii kod değerini verir. X Ascii kod değerine karşılık karakteri verir. X string ifade Y içerisinde aranır. X string ifade Y içerisinde, i. konumundan itibaren aranır. X string ifadesinin soldan y karakteri alınır. X string ifadesinin karakter sayısını verir. X string ifadesi küçük harflerle elde edilir. X string ifadesinin soldan boşlukları atılarak elde edilir. X Unicode değerinin karşılı olan karakteri verir. X string ifadesi içindeki tüm y ifadeleri z ifadeleri ile değiştirilir. X string ifadesinin sağdan Y karakteri alınır. X string ifadesinin sağdan boşlukları atılarak elde edilir. X adet boşluktan oluşan string oluşturur. X string ifadesinin y sütunundan itibaren z adetini verir. X Unicode karakterinin karşılığı olan sayısal değeri verir. X string ifadesi büyük harflerle elde edilir. Bölüm 7: Microsoft Transact - SQL Örnek 1: Select Upper(Ad), Soyad From Kimlik Yukarıdaki kullanımda ‘Kimlik’ adlı tabloda ‘Ad’ alanındaki veriler büyük harflerle, ‘Soyad’ alanındaki veriler ise aynen tablodaki gibi elde edilir. Örnek 2: Select * From Kimlik Where Lower ( Ad ) = ‘zeynep’ Yukarıdaki kullanımda ‘Kimlik’ adlı tabloda ‘Ad’ alanındaki değeri küçük harflerle ‘zeynep’ olan kayıtlar elde edilir. Örnek 3: -125- Dr. Serkan DİŞLİTAŞ Örnek 4: -126- Bölüm 7: Microsoft Transact - SQL 7.6. Karar ve Çevrim Kontrol İşlemleri T-SQL ile yazılan komut satırları yukarıdan aşağıya doğru sıralı olacak şekilde işletilir. Karar ve Çevrim kontrol komutları kullanılarak komut satırlarının işletilmesi düzenlenebilmektedir. 7.6.1. Karar Kontrol Karar kontrol komutları, komut satır/satırlarının belirlenen bir şarta bağlı olarak işletilip işletilmemesini ya da işletilme sırasının değiştirilmesini sağlar. IF .. ELSE Komutu Belirtilen şarta bağlı olarak komut ya da komut satırlarının işletilmesini sağlar. If (Şart 1) ( İfade 1) Else If (Şart 2) ( İfade 2) Else ( İfade 3) Örnek 1 : EKSTRA ÖRNEK ------------------------If 45%2=0 Print 'ÇİFT' ELSE Print 'TEK' ---------------------------------------------------Burada @sayi değişkeni Int tipli olduğundan (eğer 2 değil de 2.0 yazılsaydı ya da @sayi değişkeni Real olarak tanımlansaydı sonuç kesirli olarak elde edilirdi) yapılan bölme kalansız bölme şeklindedir. -127- Dr. Serkan DİŞLİTAŞ Örnek 2 : Burada @Ogrno, Char(9) tipli bir değişken olarak tanımlanmıştır. Eğer @Ogrno, ‘11’ değerine eşitse mesaj olarak ‘Zeynep’ verilir. Eğer ‘11’ değilse ‘12’ olarak yeni bir şart kontrol edilir. @Ogrno, ‘12’ ise ‘Hatice’, eğer bu da değilse ‘Bilinmiyor’ olarak mesaj verilir. CASE .. END Komutu Program akışının çok değerli kontrolünün yapılmasını sağlayan bir işlevdir. Select veya Update komutlarıyla birlikte kullanılır. İki şekilde kullanımı vardır. 1. Kullanım : Case (Şart Değeri) When (Değer 1) Then When (Değer 2) Then …. Else (Diğer İfade) End 2. Kullanım : Case When (Şart 1) Then When (Şart 2) Then …. Else (Diğer İfade) End (İfade 1) (İfade 2) (İfade 1) (İfade 2) Not : Burada sadece ilk şartı sağlayan When satırındaki ifade çalıştırılır. -128- Bölüm 7: Microsoft Transact - SQL Örnek 1: Yukarıdaki her iki kullanımda; Kimlik tablosundan Ogrno, Ad, Soyad bilgileri doğrudan alınırken, Cins alanına ait bilgiler ‘0’ ve ‘1’ değerlerinden Case..End işlevi ile ‘ERKEK’ ve ‘KADIN’ verilerine dönüştürülerek alınmaktadır. Cins Alan değeri burada 0 veya 1’den farklı ise sonuç Null olarak elde edilir. Bu nedenle şarta uymayan durumlar için Else kullanılarak Null yerine istenen değer aktarımı yapılabilmektedir. Aşağıda Else kullanılarak yapılan kontrolde şarta uymayan durumlar için Cins alan içeriği doğrudan aktarılmaktadır. Select Ogrno, Ad, Soyad, Case When Cins = '0' Then 'ERKEK' When Cins = '1' Then 'KADIN' Else Cins End as Cinsiyet From Kimlik -129- Dr. Serkan DİŞLİTAŞ GOTO Komutu Program akışının koşulsuz olarak değiştirilmesini sağlar. Goto (Etiket) … (Etiket) : … --------------------------------------------İleri Adresleme; Geri Adresleme; (Etiket) : … Goto (Etiket) Örnek 1: Burada ‘Basla’ etiketi ile geri adresleme yapılarak bir çevrim oluşturulmuştur. ‘Cik’ etiketi ile de ileri adresleme yapılarak program sonlandırılır. -130- Bölüm 7: Microsoft Transact - SQL 7.6.2. Çevrim Kontrol Çevrim kontrol komutları, komut satır/satırlarının belirlenen şart sağlandığı sürece işletilmesini sağlar. WHILE Komutu Bir ifade bloğu belirlenen şart sağlandığı sürece işletilir. Şartın durumuna göre, blok hiç işletilmeyeceği gibi sonsuz çevrime de girebilir. While (Şart) Begin ( İfade Bloğu) End Not : Break ve Continue komutları kullanılarak While çevriminin işlevi değiştirilebilir. Continue : İfade Bloğu tamamlanmadan çevrimin bir sonraki turuna geçilir. Break : İfade Bloğu tamamlanmadan çevrim sona erdirilir. Örnek 1: -131- Dr. Serkan DİŞLİTAŞ 7.7. Geçici Tablo Oluşturma MSSQL Server ortamında T-SQL dili yardımıyla geçici tabloların oluşturularak kullanılması mümkündür. Geçici tabloların, sistem çalışması esnasında oluşturulmasıyla birtakım işlemlerin daha kolay ve güvenli bir şekilde yapılması sağlanabilmektedir. Geçici tablo oluşturma işlemi birkaç yöntemle yapılabilmektedir. Ayrıca oluşturulan geçici tablolar üzerinde Drop, Insert Into, Update vb. SQL komutlarının işletilmesi de mümkündür. 7.7.1. Gecici Tabloların tempdb Veritabanında Oluşturulması tempdb, geçici tabloların tutulduğu sistem veritabanıdır. Bu veritabanı içerisinde oluşturulan tablolar da geçici olmaktadır. Server kapatılıp açıldığında bu tabloların silindiği görülebilmektedir. Aşağıda tempdb veritabanında, Kimlik_Gecici adlı bir tablo oluşturulmaktadır. -132- Bölüm 7: Microsoft Transact - SQL Yukarıdaki gibi tablo oluşturulduğunda MSSQL Kimlik_Gecici adlı tablo aşağıdaki gibi görülmelidir. Server tempdb veritabanında -133- Dr. Serkan DİŞLİTAŞ 7.7.2. Oturum Boyunca Geçerli Geçici Tablo Oluşturulması Özellikle oturum kapandığında silinen tablolardır. Bu tablolar aynı zamanda MSSQL Server kapatılıp açılarak ya da Drop komutu kullanılarak da silinebilmektedirler. Aşağıda Kimlik_Gecici_2 adlı bir geçici tablo oluşturulmaktadır. Bu yöntemde geçici tablo isimlerinin başında # karakteri kullanılmaktadır. 7.8. Transactions (İşler) Bir işi oluşturan birden fazla işlemin hepsinin de başarılı bir şekilde yerine getirilmesinin gerekli olduğu durumlar için ‘Transaction’ yapıları kullanılır. Bu sayede işlemlerden herhangi biri ya da daha fazlası sonuçlanamazsa tüm işlemlerin iptal edilerek işe başlama noktasına ya da belirlenen bir noktaya yeniden dönülmesi sağlanır. Bu sayede işin bütünlüğü korunur. Örnek 1: A listesinden B listesine bir öğrenciyi transfer etmek isteyelim. Yapılması istenen iş, öğrencinin A listesinden silinmesi işlemi ile sonrasında B listesine bu öğrencinin kayıt edilmesi işleminden oluşmaktadır. İşi Başlat 1. İşlem : 2. İşlem : İşi Bitir -134- Öğrenciyi A listesinden Sil Öğrenciyi B listesine Ekle Bölüm 7: Microsoft Transact - SQL Burada işlemlerden birinin yapılamaması durumunda ya öğrenci hiçbir listede yer almayacak ya da her iki listede yer alacaktır. Bu durumu engellemek için, her iki işlemin de başarılı olması durumunda işin gerçekleştirilmesini onaylamaktır. Diğer durumlarda işi oluşturan diğer işlemler de iptal edilerek iş başlangıcına dönülmektedir. Örnek 2: Banka hesabından para çekme işi tanımlayalım. Yapılması istenen iş, hesap kontrolü, hesaptan parayı düşme ve para ödeme olmak üzere 3 temel işlemden oluşsun. İşi Başlat 1. İşlem : 2. İşlem : 3. İşlem : İşi Bitir Hesap Kontrolü Yap Hesaptan Parayı Düş Para Ödemesi Yap Buradaki işlemlerden herhangi birinin sistem arızası, elektrik kesintisi gibi çeşitli nedenlerden dolayı gerçekleşmemesi durumunda diğer işlemlerin de iptal edilerek iş başlangıcına dönülmesi gerekmektedir. 7.8.1. Transaction Komutları Transaction yapısı aşağıdaki gibidir. Insert, Update ve Delete komutları Transaction için geçerli birer işlemdir. -- Tran yerine Transaction da kullanılabilir. Begin Tran … İşlemler … Commit Tran -135- Dr. Serkan DİŞLİTAŞ Begin Tran : Transaction Başlangıcı Commit Tran : Transaction Sonu RollBack Tran : Transaction Geri Al, İptal Et Save Tran (İşlem Yeri Adı) : Transaction Ara İşlem Yeri Belirle RollBack Tran [İşlem Yeri Adı] : Ara İşlem Yerine Geri Al Save Tran ifadesi ile Transaction sınırları içerisinde ara yerler adlandırılabilmektedir. RollBack Tran ifadesinde de bu adlar parametre olarak verilerek ara noktalara geri dönüş sağlanmaktadır. Parametre verilmezse Transaction başına dönülür. Örnek 1: Begin Tran -- Öğrenci B Listesine ilave edilir. Insert Into Liste_B Select * From Liste_A Where Ogrno ='034526050' -- Öğrenci A Listesinden silinir. Delete From Liste_A Where Ogrno ='034526050' Commit Tran Burada Begin Tran ve Commit Tran ifadesi arasında kalan işlemlerin her ikisi de (Ekleme ve Silme) gerçekleşmeden iş onayı verilmez ve tablolarda fiziksel işlemler gerçekleştirilmez. 7.9. Saklı Prosedürler (Stored Procedures) Saklı Prosedürler, sunucu veritabanında saklanan derlenmiş Transact-SQL deyimlerinden oluşan altyordamlardır. Saklı Prosedürler sadece ilk çalıştırılmalarında derlenirler, sonraki çalışmalarda mevcut derlenmiş kodlar kullanılır. Bir Saklı Prosedür başka bir saklı Prosedürü çağırabilir. (32 defa iç içe). 7.9.1. Saklı Prosedürlerin Avantajları -136- Sunucu üzerinde önceden derlenmiş olduklarından ağ trafiğini azaltırlar ve dolayısıyla da performansı artırmaktadırlar. Veritabanı ile birlikte kopyalama ile çoğaltılabilirler.(Veritabanında tutulur) Saklı prosedürlerde parametre ile veri göndermek ve almak mümkündür. Bölüm 7: Microsoft Transact - SQL 7.9.2. Genel Saklı Prosedür Türleri Saklı prosedürler sistem ve kullanıcının yarattığı olmak üzere iki yapıdadır. 7.9.2.1. Sistem Kaynaklı Hazır Saklı Prosedürler Master veritabanında depolanan ve sp_ ile başlayan saklı prosedürleridir. Bazı sistem saklı prosedürleri ve işlevleri aşağıda listelenmiştir. Saklı Prosedür Adı İşlevi Sp_Help Sp_Helpdb Sp_Who Sp_AddLogin Sp_Add_JobSchedule Sp_Rename Sp_Renamedb Sp_AddType Sp_DbOption Veritabanı nesneleri, veri tipleri hakkında yardım Veritabanı hakkında bilgiler Geçerli MSSQL kullanıcıları ve işlevleri Verilen parametresi ile veritabanı için kullanıcı ekler. İşler için zamanlama yapma Kullanıcı veritabanı nesnelerini yeniden adlandırma Veritabanı adı değiştirme Yeni veri tipi oluşturma Veritabanı hakkında bilgiler Saklı Prosedür Çağırma Execute (Saklı Prosedür Adı) [parame1, parametre 2 …] Örnek 1: Execute Sp_Who Burada geçerli MSSQL kullanıcıları ve işlevleri elde edilir. Örnek 2: Execute Sp_AddLogin ‘Misafir’, ‘1234’, ‘myo’ ‘myo’ veritabanında geçerli olmak üzere ‘Misafir’ adında, şifresi ‘1234’olan bir kullanıcı oluşturulur. Örnek 3 : Sp_AddType tisim, ‘varchar(20)’, ‘Not Null’ Aşağıda Sp_AddType saklı prosedürü kullanılarak yeni bir veri tipi oluşturulmuş ve tablo oluşturulurken bu yeni veri tipi kullanılmıştır. -137- Dr. Serkan DİŞLİTAŞ Kullanıcı Tanımlı Saklı Prosedürler Create Procedure [Parametre_Listesi] As Procedure_Bloğu Procedure_Adi Not 1 : Prosedürlerin çağrılmasında Master veritabanında, sp_ ile başlayanların önceliği vardır. Bu durum göz önüne alınarak isim verilmesi gerekmektedir. Not 2 : # [Procedure_Adi] ## [Procedure_Adi] Örnek 1 : -138- >>> >>> Geçici Yerel Procedure tanımlanabilir. Geçici Genel Procedure tanımlanabilir Saklı prosedür oluşturma ve kullanma. Bölüm 7: Microsoft Transact - SQL Not : Aşağıda ‘sysobjects’ tablosunda nesneler ve tipleri verilmektedir. Nesneler ve Type Değerleri Name Stored Procedure Table View Trigger … (‘sysobjects’ tablosu) Type ‘P’ ‘U’ ‘V’ ‘Tr’ … -139- Dr. Serkan DİŞLİTAŞ Örnek 2 : Parametreli Saklı Prosedür oluşturma ve kullanma. Burada ’03’ saklı prosedüre parametre (OgrNo alanı için Where satırında kullanım için) olarak verilmiştir. -140- Bölüm 7: Microsoft Transact - SQL Örnek 3 : Default Parametreli Saklı Prosedür Oluşturma ve kullanma. -141- Dr. Serkan DİŞLİTAŞ Örnek 4 : -142- Çıkış Parametreli (Output) Saklı Prosedür Oluşturma ve Kullanma Bölüm 7: Microsoft Transact - SQL Örnek 5 : Faktöriyel Hesaplayan Saklı Prosedür Oluşturma ve Kullanma -143- Dr. Serkan DİŞLİTAŞ Örnek 6 : -144- Return Geri Dönüşlü Saklı Prosedür Oluşturma ve Kullanma Bölüm 7: Microsoft Transact - SQL 7.10. Tetikleyiciler (Trigger) Insert, Update ve Delete komutlarıyla yapılan kayıt işlemlerinde otomatik olarak çalışan dışarıdan parametre almayan özel Saklı Prosedürlerdir. İş bütünlüğü korunarak ilişkisiz verilerin tutulması engellenmiş olur. Örneğin öğrenci ‘Kimlik’ tablosundan bir öğrencinin silinmesi durumunda, ‘Notlar’ tablosundan da o öğrencinin notlarının silinmesi işlemi tetikleyiciler ile yapılabilir. Ayrıca, ‘Fatura’ giriş-çıkışı durumuna göre otomatik olarak ‘Stok’ giriş-çıkışının yapılması işlemi de tetikleyiciler için örnek gösterilebilir. MS SQL server iki ayrı tetikleyici destekler. Bunlar : ‘After’ Tetikleyicileri (After ve For olarak kullanılır.) ‘Instead Of’ Tetikleyicileri 7.10.1. After Tetikleyicileri ‘After’ tetikleyicileri, onu çağıran komuttan sonra çalıştırılırlar. Insert, Update, Delete komutları için kullanılabilir. Sadece tablolar için oluşturulabilirler (View- Görünümler için oluşturulamaz). Alt düzey kısıtlamalar işletildikten sonra çağrılırlar. Kısıtlama ile herhangi bir sorunlu durum ortaya çıkarsa tetikleyici çağrılmaz. Bir tetikleyici birden çok komuta uygulanamaz. Ancak her komut için ayrı bir tetikleyici oluşturulabilir. 7.10.2. Instead Of Tetikleyicileri ‘Instead Of’ tetikleyicileri, onu çağıran komutların yerini alırlar. Insert, Update, Delete komutları için kullanılabilir. Bir tetikleyici birden çok komuta uygulanabilir. Tablo ve görünümler (View) için ‘Instead Of’ tetikleyicileri oluşturulabilir, ancak Tablo/View’ e ait bir eylem için tek bir tetikleyici kullanılabilmektedir. Instead Of tetikleyicileri ile bir tabloya eksik veri girildiğinde engelleme yapılabilir. Numara, Ad ve Soyad girilmesi gerekirken bazılarının eksik girilmesi gibi durumlarda değeri girilmeyen alanlar istenmeyen bir şekilde ‘Not Null’ olur. 7.10.3. Tetikleyici Etkilenmeleri Tablolarda yapılan işlemlere bağlı olarak Tetikleyici etkilenmelerine ait tablo aşağıda verilmiştir. INSERT DELETE UPDATE Tetikleyicisi Tetikleyicisi Tetikleyicisi INSERTED Eklenen Kayıtlar Güncelleme Sonrası DELETED Silinen Kayıtlar Güncelleme Öncesi -145- Dr. Serkan DİŞLİTAŞ 7.10.4. Tetikleyici (Trigger) Oluşturma Tetikleyicileri oluşturmak için gerekli yapı aşağıdaki gibidir. Create Trigger Trigger_Adi On (Tablo_Adı/View_Adı) Tetikleyici_Turu Komut As (Tetikleyici_Tarafından_Yürütülecek_SQL_Cümleleri) Örnek 1: -146- ‘After’ Tetikleyicisi Oluşturma ve Kullanma Bölüm 7: Microsoft Transact - SQL Örnek 2: ‘After’ Tetikleyicisi Oluşturma ve Kullanma -147- Dr. Serkan DİŞLİTAŞ Örnek 3: ‘Instead Of ’ Tetikleyicisi Oluşturma ve Kullanma Burada S_InsteadOf_Tr adlı trigger tanımlandığından dolayı, Kimlik tablosunda herhangi bir değişiklik yapılmak istendiğinde (burada sadece Update için geçerli) Trigger devreye girecek ve istenen işlemi iptal ederek onun yerine çalışacaktır. Admin yetkili kişi bu ‘Trigger’ ifadesini devreye alıp çıkararak diğer kullanıcıların çalışmalarını sınırlayabilmektedir. Bu sayede istenilmeyen durumlarda (güncelleme, bakım vb.) veritabanında ilgili tablolar için istenen Ekleme-Güncelleme-Silme gibi işlemler devre dışı bırakılmış olacaktır. -148- Bölüm 7: Microsoft Transact - SQL Tartışma : ‘Kimlik’ tablosunun güncelleştirilmesine yönelik hem ‘After’ hem de ‘Instead Of’ tetikleyicisi mevcut iken (önceki iki örneğe ait tetikleyiciler), ‘Kimlik’ tablosunda bir değişiklik yapılmak istenirse ne olur ? Açıklama : Öncelikle ‘Instead Of ’ tetikleyicisi devreye girecektir. Bu tetikleyici de Update işlemini engelleyip kendisi çalışacağından diğer ‘After’ tetikleyicisi de çalışmayacaktır. 7.11. İmleçler (Cursors) İmleçler, SQL sorgusu ile elde edilen ResultSet içerisinde belli bir kaydı işaret edebilen yapılardır. İmleçler yardımıyla ResultSet kayıtlarına birer birer sırayla ulaşmak ve üzerlerinde güncelleme, silme gibi değişik işlemler yapmak mümkün olmaktadır. İmleç Komutu Açıklama Declare cr_Staj Cursor For Select OgrNo, SYapGun From Staj27 İmleç Oluşturma Open cr_Staj İmleç Açma Fetch From cr_Staj Into @Numara, @StajGun İmleç Değerini Al Fetch First From cr_Staj Into @Numara, @StajGun Fetch Last From cr_Staj Into @Numara, @StajGun İlk İmleç Değerini Al Son İmleç Değerini Al Fetch Prior From cr_Staj Into @Numara, @StajGun Önceki İmleç Değerini Al Fetch Next From cr_Staj Into @Numara, @StajGun Close cr_Staj Sonraki İmleç Değerini Al +n : Baştan n. İmleç Değerini Al -n : Sondan n. İmleç Değerini Al +n : İleri n. İmleç Değerini Al -n : Geri n. İmleç Değerini Al İmleç Kapatma DeAllocate cr_Staj Set RowCount 0 Set RowCount n İmleci Bellekten Çıkartma Tüm ResultSet alınır. ResultSet’in n adedi alınır. Fetch Absolute n From cr_Staj Into @Numara, @StajGun Fetch Relative n From cr_Staj Into @Numara, @StajGun @@Cursor_Fetch Fonksiyonu Geri Dönüş Değerleri ve Anlamları Geri Dönüş Değeri 0 -1 -2 Anlamı Fetch işlemi başarılı Fetch işlemi başarısız ResultSet sonu (Satır yok ) -149- Dr. Serkan DİŞLİTAŞ Örnek 1 : Aşağıda cr_Staj adlı basit bir imleç oluşturulmuş ve bu imleç ile kayıtlar teker teker getirilerek ekrana raporlanmıştır. -150- Bölüm 7: Microsoft Transact - SQL 7.12. Transact-SQL Uygulamaları Uygulama 1: 2005-2006 BAHAR dönemine ait 4526118-00 kodlu dersin öğretim elemanı elde edilir. Uygulama 2: Numarası 054526012 olan öğrencinin geçtiği dersler elde edilir. -151- Dr. Serkan DİŞLİTAŞ Uygulama 3: Tablodan 1. döneme ait dersler Derskodu sırasına göre elde edilir. Uygulama 4: Tablodan ‘2005-2006 BAHAR’ dönemine ait ‘4527214-00’ kodlu dersi alan öğrenciler numara sırasına göre elde edilir. -152- Bölüm 7: Microsoft Transact - SQL Uygulama 5: Tablodan numarası 04 ile başlayan mezun olmuş öğrencilerin istenen özelliklerde kayıt bilgileri elde edilmektedir. Uygulama 6: Bu uygulamada Alt Sorgular yardımıyla; 24120 sicil numaralı öğretim elemanının, 2005-2006 BAHAR döneminde girdiği derslere ilişkin ayrıntılı bilgi elde edilir. -153- Dr. Serkan DİŞLİTAŞ Uygulama 7: Öğrencilerin geçtikleri derslerin kredileri toplamı elde edilir. Uygulama 8: Öğrencinin devam zorunluluğu olmayan dersleri elde edilir. -154- Bölüm 7: Microsoft Transact - SQL Uygulama 9: 2005-2006 BAHAR dönemine ait derslerin öğrenci mevcutları elde edilir. Uygulama 10: 24120 sicil numaralı kullanıcının şifresi değiştirilmektedir. -155- Dr. Serkan DİŞLİTAŞ Uygulama 11: 044527014 numaralı öğrencinin 2004-2005 GÜZ dönemi 4527117-00 kodlu dersinin not bilgileri güncellenmektedir. Sonrasında bu not yeniden elde edilmektedir. Uygulama 12: 044527014 numaralı öğrenci için, 2004-2005 BAHAR dönemindeki 4527118-00 kodlu derse kaydı(ekleme) yapılmaktadır. -156- Bölüm 7: Microsoft Transact - SQL Uygulama 13: 4527118-00 kodlu dersten 2004-2005 BAHAR döneminde başarılı olan öğrencilerin mevcudu elde edilir. Uygulama 14: 4527118-00 kodlu dersten 2005-2006 BAHAR döneminde sınava giren öğrencilerin mevcudu elde edilir. Uygulama 15: 2004-2005 BAHAR dönemi harç miktarı toplamı elde edilir. -157- Dr. Serkan DİŞLİTAŞ Uygulama 16: Öğrencilerin yaptıkları toplam staj gün sayıları elde edilir. Uygulama 17: Öğretim elemanlarının 2005-2006 BAHAR döneminde girdikleri Normal Öğretim ders saatleri elde edilir. -158- Bölüm 7: Microsoft Transact - SQL Uygulama 18: 2005-2006 BAHAR döneminde 4527118-00 kodlu dersi alan öğrencilerin aritmetik ortalaması elde edilir. Uygulama 19: 2005-2006 BAHAR döneminde 4527118-00 kodlu dersi alan öğrencilerin Standart Sapması elde edilir. -159- Dr. Serkan DİŞLİTAŞ Uygulama 20: Öğrencilerin 2005-2006 BAHAR dönemindeki Kredi ve Ders Saati toplam miktarları elde edilmektedir. Uygulama 21: Program derslerinin yer aldığı tablo oluşturulur. DersKodu alanı Birincil İndeks olarak tanımlanmıştır. -160- Bölüm 7: Microsoft Transact - SQL Uygulama 22: Program harç bilgilerinin yer aldığı tablo oluşturulur. OgrNo, HDonem ve HarcFisNo alanları Birincil İndeks olarak tanımlanmıştır. Uygulama 23: Program staj bilgilerinin yer aldığı tablo oluşturulur. OgrNo, SDonem ve SBasTar alanları Birincil İndeks olarak tanımlanmıştır. -161- Dr. Serkan DİŞLİTAŞ Uygulama 24: Program öğrenci ders ve not bilgilerinin yer aldığı tablo oluşturulur. OgrNo, DersKodu ve DYilDonem alanları Birincil İndeks olarak tanımlanmıştır. Uygulama 25: OgrKimlik10 adlı tablo mevcut ise fiziksel olarak veritabanından silinmektedir. Not : Veritabanına ait nesne bilgileri SysObjects adlı sistem tablosunda tutulmaktadır. -162- Bölüm 7: Microsoft Transact - SQL Uygulama 26: Öğrencilerin 4527118-00 kodlu dersi kaçıncı kez aldığı belirlenmektedir. Eğer ders alam sayısı 1 ise İlk, 2 ve daha fazla sayıda ise Tekrar sonucu elde edilmektedir. Uygulama 27: 044527012 numaralı öğrenci için, 2004-2005 BAHAR dönemindeki DC olan dersleri dönem ortalaması 2.0 ve yukarısı ise DC+ (GEÇER), değilse DC- (TEKRAR) olarak güncellenecektir. -163- Dr. Serkan DİŞLİTAŞ Uygulama 28: Öğrencilerin her biri için 2005-2006 BAHAR döneminde aldıkları dersler için ağırlıklı not ortalamaları hesaplanmaktadır. -164- Bölüm 7: Microsoft Transact - SQL Uygulama 29: 2005-2006 öğretim yılında (% nedeniyle GÜZ, BAHAR ve YAZ OKULU dahil) numarası 05 ile başlayan öğrencilerin her biri için ağırlıklı not ortalaması hesaplanmakta ve %10’a girenlerin listesi elde edilmektedir. Burada Top 10 ile en üstten %10’luk dilime girenlerin elde edilmesi sağlanmaktadır. -165- Dr. Serkan DİŞLİTAŞ Uygulama 30: Öğrencilerin geçtikleri dersler baz alınarak, Transkript için Toplam Kredi Miktarı ve Ağırlıklı Not Ortalaması elde edilmektedir. -166- Bölüm 7: Microsoft Transact - SQL Uygulama 31: Kullanıcı giriş kontrolü yapılmaktadır. Bu amaçla S_Kullanici_Sp adlı Saklı Prosedür kullanılmıştır. Saklı prosedüre kullanıcı adı ve şifresi gönderilmektedir. Saklı prosedür parametrik olarak aldığı bu iki değeri veritabanında tarayarak geçerli olup olmadığını kontrol etmekte ve sonuç olarak geriye kullanıcı açık kimliği ve görev yetkisi döndürülmektedir. Eğer böyle bir kullanıcı yok ise geriye Null değeri dönmektedir. S_Kullanıcı_Sp adlı saklı prosedür içeriği aşağıda verilmiştir. -167- Dr. Serkan DİŞLİTAŞ -168-
Benzer belgeler
tıme based sql ınjectıon
Bağlantı/Bağlantı Girişimi sayısı (Sunucunun başlatılmasında sonra)
Disk Okuma Sayısı (Sunucunun başlatılmasında sonra)
Disk Yazma Sayısı (Sunucunun başlatılmasında sonra)
Disk Okuma/Yazma Hatası S...
VERİTABANI YÖNETİM SİSTEMLERİ
yüklenmesini ifade eder.
Veri tabanı üzerinde iĢlem yapmak; belirli bir veri üzerinde sorgulama yapmak,
meydana gelen değiĢiklikleri yansıtmak için veri tabanının güncellenmesi ve rapor
üretilmesi ...