Sql Server

Sql Server Fonksiyonlar

Herkese merhaba, Sql Server yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Sql Server’da fonksiyonları anlatacağım. Hadi başlayalım !

Sql Server yada bir diğer adıyla MsSql’de diğer Sql dillerinde de olduğu gibi fonksiyonlar bulunmakta ve Sql Server’ın kendine ait yerleşik fonksiyonları olduğu gibi kullanıcının kendi fonksiyonunu yazabilmesine ve kullanmasına da olanak sağlıyor. Örneğin count(), rtrim(), cast(), convert() gibi fonksiyonlar Sql Server’ın yerleşik fonksiyonları ve bunları Sql sorgusu içerisinde select ile beraber yada where koşuluyla beraber kullanabiliyorsunuz. Örneğin tablodaki toplam veri sayısını bulmak için select count(*) from tablo gibi bir Sql sorgusu yazmanız gerekiyor.

Fonksiyonlar, programlama dillerinden alışık olduğumuz gibi parametre alabiliyor yada almayabilir. Fakat her zaman geriye değer döndürmek zorundadır. Bunun kararı fonksiyonu yazan kişiye yani size bağlı. Örneğin parametre olarak aldığı sayıları toplayıp toplamları geri döndüren bir fonksiyon yazmak istediğinizde parametre alan bir fonksiyon yazmanız gerekiyor. Fakat fonksiyonlar genel olarak parametre alıp geriye değer döndürecek şekilde yazılıyorlar. Örneğin programınızda benzer şeyleri defalarca yapmanız gerekiyor diyelim ve bu işlemleri de veritabanında yapıyorsunuz. İşte o zaman yapacağınız işlem için bir tane fonksiyon yazıp değişecek değerleri de parametre olarak alıp geriye de işlem sonucunu döndürür ve bu işlemi yapacağınız her yerde bu fonksiyonu çağırırsanız tekrar eden kod yazmak zorunda kalmaz, yapılacak işlemi tek bir yerden kontrol edebilirsiniz.

Fonksiyonlar, Microsoft Sql Server Management Studio’da veritabanı altında Programmability altındaki Functions dizininde bulunuyor. Yani yazdığınız fonksiyonlar buraya kaydediliyor ve buradan erişiliyor. Fonksiyon üzerinde değişiklik yapmak istediğinizde yada “ya şöyle bi fonksiyon var ama ne iş yapıyor acaba ?” diye düşünürseniz bu alandan ilgili fonksiyonun kodlarına erişebilir ve isterseniz düzenleyebilirsiniz. Sql Server’ın kendi fonksiyonlarının kodlarını ne yazık ki göremiyoruz, onlar yerleşik fonksiyonlar olduğu için kodları dışarıya açık değil.

Her Sql işlemin olduğu gibi fonksiyon yazmanın da belirli bir kod yapısı var. Bu yapı şu şekilde;

create function fonksiyon_adı(@parametre1 veri_tipi1, @parametre2 veri_tipi, ...) returns dönüş_tipi as begin
	-- fonksiyonda yapılacak sql kodları buraya
	-- fonksiyonda yapılacak sql kodları buraya
	-- fonksiyonda yapılacak sql kodları buraya
	return geriye_döndürülecek_veri
end;

Oluşturma yapısı aslında çok basit fakat fonksiyonun içerisine o kadar çok şey yazabiliriz ki bir kütüphane doldurabilir 🙂 Burada bulunan fonksiyon_adı kısmına fonksiyonunuzun adını, parantez içine parametre ve bu parametlerin veri tiplerini, dönüş_tipi yerine geriye döndüreceğiniz verinin tipini, geriye_döndürülecek_veri kısmına ise geriye döndüreceğiniz veriyi yazmanız gerekiyor. Parametreler dikkat etmemiz gereken bir nokta var; parametre isimleri @ işareti ile başlamalı. @ ile başlatmadığınız zaman Sql Server bunun bir değişken olduğunu algılayamayabiliyor ve komut olarak çalıştırmaya çalışıyor. Öyle olunca da fonksiyonunuz hata verebiliyor. Fonksiyonda parametre olarak aldığımız değişkenleri kullanırken de başına @ işareti koymamız gerekiyor. Fonksiyonlarda bir diğer dikkat etmemiz gereken şey ise, geriye döndüreceğiniz verinin veri tipi ile returns dönüş_tipi kısmına yazdığınız veri tipinin aynı olması gerekiyor. Sonuçta siz örneğin integer döndüreceğim diyip geriye varchar döndürürseniz, Sql Server bu ne perhiz bu ne lahana turşusu der. O yüzden veri tiplerine dikkat etmelisiniz. Ayrıca geri döndüreceğiniz verinin Sql Server’daki int, varchar, text gibi yerleşik veri tiplerinden olması zorunluluğu yok, bir tablo sonucunda gelen veriyi de geriye döndürebilirsiniz. Bunun için dönüş_tipi olarak returns table yazmanız ve geriye sorgu sonucunu döndürmeniz yeterli.

Örneğin biz şimdi parametre olarak aldığı 2 tane sayının toplamını alıp geriye döndüren toplam adında bir fonksiyon yazalım.

create function toplam(@sayi1 int, @sayi2 int) returns int as begin
	return @sayi1 + @sayi2;
end;

Görüldüğü üzere 2 tane sayıyı dışarıdan alıp topladık ve geriye döndürdük.

Bizim yazdığımız fonksiyon aslında çok basit bir yapıda oldu çünkü az öncede dediğim gibi bir fonksiyonun yapabileceği şeyler o kadar çok ki, kütüphane doldurur. Fonksiyon içerisinde başka bir fonksiyonu çağırabiliyoruz, fonksiyon içerisinde değişkenler oluşturabiliyor ve bu değişkenleri kullanabiliyoruz, stored procedure çalıştırabiliyoruz, cursor tanımlayabiliyoruz, … fakat şimdilik giriş aşamasında olduğumuz için fonksiyonları anlatmak adına böyle kısa bir fonksiyon örneği verdim. Diğer yazılarımızda hem sistem fonksiyonlarının ne iş yaptıklarını ve kullanmayı, hemde yapmak istediğimiz şeylere karşı yazmamız gereken fonksiyonları anlatacağım.

Bir fonksiyonu çağırmak içinde select ifadesini kullanıyoruz. Yani yapı şöyle oluyor;

select fonksiyon_adı(@parametre1, @parametre2, ...);

Fonksiyonlar bu şekilde çağrıldıktan sonra geriye döndürdükleri değeri istediğimiz gibi kullanabiliriz. Örneğin az önce yazmış olduğumuz fonksiyonda 5 ile 15’i toplayıp ekranda gösterelim. select ifadesi tek başına kullanıldığında ekrana yazma görevi göreceğinden doğrudan select ile bakabiliriz.

select toplam(5, 15);

Bu komut sonrasında ekranda şöyle bir çıktı göreceğiz.

sql server fonksiyonlar 1
Sorgu Sonucu

Fonksiyon oluşturmayı anlattık fakat var olan fonksiyonları düzenleyebiliyor veya silebiliyorsunuz. Düzenleyebiliyor derken, yaptığı işlemleri değiştirebiliyorsunuz. Yani begin ile end arası fonksiyonun gövdesi ya, işte o alanı değiştirebiliyorsunuz. Bunun için yazmanız gereken kod yapısı şöyle olacaktır;

alter function fonksiyon_adı(@parametre1, @parametre2, ...) returns veri_tipi as begin
	-- fonksiyonda yapılacak sql kodları buraya
	-- fonksiyonda yapılacak sql kodları buraya
	-- fonksiyonda yapılacak sql kodları buraya
	return geriye_döndürülecek_veri;

Farkettiyseniz fonksiyon oluştururken create function diye başlıyorduk, fonksiyonu güncellemek için de alter function diye başlıyoruz. Fonksiyon oluşturma ile düzenleme arasındaki tek fark bu, geri kalan herşey birebir aynı. Bir fonksiyonu düzenledikten sonra artık eski hali silinip yeni hali kaydediliyor ve yeni halini kullanabiliyorsunuz. Ha tabi fonksiyon gövdesi değişeceği için o fonksiyonu kullandığınız yerleri tekrardan bir gözden geçirmekte fayda var 🙂

Örneğin az önce dışarıdan 2 tane sayı alıp bunların toplamını geri döndüren toplam adında bir fonksiyon yazmıştık ya, gelin onu 3 parametre alıp üçünün toplamını geri döndürecek şekle çevirelim.

alter function toplam(@sayi1 int, @sayi2 int, @sayi3 int) returns int as begin
	return @sayi1 + @sayi2 + @sayi3;
end;

Fonksiyon silmek için ise şöyle bir kod yapımız olacaktır;

drop function fonksiyon_adı

Bu kod sayesinde daha önce yazmış olduğumuz fakat artık işimize yaramayan fonksiyonları silebiliyoruz. Sildikten sonra artık o fonksiyona bir daha asla ulaşamayacağımız için fonksiyonu çağırdığınız herhangi bir yerin olmadığından emin olmalısınız.

Evet bu yazımızda bu kadardı, tüm Sql Server yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu