Makale Özeti

Daha önceki iki yazımızda SQL Server içinde yer alan hazır fonksiyonlar ve sistem fonksiyonlarından bahsetmiştik. Bu yazımızda ise konumuz kendi fonksiyonlarımızı yaratmak ve bunları sorgularımızda kullanmak üzerine.

Makale

Daha önceki iki yazımızda SQL Server içinde yer alan hazır fonksiyonlar ve sistem fonksiyonlarından bahsetmiştik. Bu yazımızda ise konumuz kendi fonksiyonlarımızı yaratmak ve bunları sorgularımızda kullanmak üzerine.

Fonksiyonlar Stored Procudure ler gibi SQL Server üzerinde barındırılan, unique isim taşıması gereken yapılardır. Stored Procedure ler gibi dışarıdan "exec" vb bir komutla çalıştırılmazlar. Uygulama içinden kullanmak ve return değerini kullanmak gerekir.

Bir fonksiyon oluşturabilmek için gerekli syntax yapısı;

CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName>
(
<@param1, sysname, @p1> <Data_Type_For_Param1, , int>,
<@param2, sysname, @p2> <Data_Type_For_Param2, , char>
)
RETURNS <Data_Type_For_Param1, , int>
AS


Yapıya baktığımızda stored procedure de olduğu gibi bir DDL statement olan "Create" ifadesini kullandığımızı, hemen ardından fonksiyonumuz için bir isim belirlediğimizi ve ardından fonksiyonumuzun alacağı parametreleri ve veri tiplerini belirttiğimizi görüyoruz. Fonksiyonumuzun bir de return değeri var. Return ifadesinde bir değişken tanımlamıyor, sadece geri dönecek olan verinin tipini belirtiyoruz.

Basit bir örnek vermemiz gerekirse;

Create Function StringBirlestir(@Isim nVarChar(50), @SoyIsim nVarChar(50)) Returns nVarChar(100)

BEGIN
    Declare @Sonuc nVarChar(100)
    Set @Sonuc = @Isim + ' ' + @SoyIsim
    Return @Sonuc
END
GO


Yukarıdaki ifadeyi bir texte dökmek gerekirse;

"StringBirlestir" isminde bir fonksiyon yaratıyoruz. Fonksiyonumuz "Isim" ve "Soyisim" adında nVarChar(50) tipinde parametre alıyor. Ve fonksiyonun çalışmasının ardından sonucumuzu NVarChar(100) tipinde geri döndürüyoruz.

Begin..End blokları arasında ise fonksiyon işlevimizi tanımlıyoruz. Yani "Sonuc" adında bir değişken tanımlıyor. Bu değişkene parametre olarak aldığımız "Isim" ve "SoyIsim" değişkenlerinin değerlerini "+" ifadesiyle birleştirerek geri döndürüyoruz.

Şimdi gerçek bir fonksiyon örneği yapalım ve bunu sorgularımızda nasıl kullanacağımızdan bahsedelim.

ÖRNEK 1 : Örneğimizde oluşturacağımız fonksiyon "01012005" gibi bir formatta kaydedilmiş olan tarih ifadelerini "2005-01-01" gibi bir formata dönüştürsün. Bu iş için öncelikle bir tablo yaratalım ve "01012005" formatında tarihler girelim. Sonrada bunu parametre olarak alacak ve istdiğim formata çevirerek geri döndürecek olan fonksiyonumuzu yazalım.




Create Function TarihFormatla(@Tarih nChar(10)) Returns DateTime

BEGIN
    Declare @Sonuc DateTime
    Set @Sonuc = Convert(DateTime, SubString(@Tarih,5,4) + '-' + SubString(@Tarih,3,2) + '-' + SubString(@Tarih,1,2))
    Return @Sonuc
END
GO





Fonksiyonumuzu yarattık. Yukarıda da bahsettiğimiz gibi "ggaayyyy" formatındaki veriyi "yyyy-aa-gg" formatında geri döndürmesini sağladık. Şimdi hem çalışıp çalışmadığını görelim hemde uygulama içinden fonksiyonumuzu nasıl çağıracağımıza bakalım.

Select ID, dbo.TarihFormatla(Tarih) from DEMO_TABLE



ÖRNEK 2 : Şimdiki örneğimiz ise stringleri birleştirmek üzerine olsun. Isim, Nick ve Soyisim den oluşan 3 parametre alsın ve bunları "Evren aka 'Mania' Ayan" gibi bir formatta birleştirerek ekrana getirsin.

Create Function Birlestir(@X nchar(10), @Y nchar(10), @Z nchar(10)) returns nchar(50)

BEGIN
    Declare @Sonuc char(50)
    Set @Sonuc = @X + '" aka "' + @Y + ' ' + @Z
    Return @Sonuc
END




Şimdide bu fonksiyonumuzu kullanalım.

Select ID, Isim, Nick, Soyisim, dbo.Birlestir(Isim, Nick, Soyisim) from DEMO_TABLE1




Evren AYAN
Microsoft MVP
http://www.evrenayan.net