User Defined Functions (UDF)_1
17 Aralık 2016 Cumartesi
Sql Server'da 3 tip UDF(User Defined Functions) vardır:
1.Scalar Functions
2.Inline Table-Valued Functions
3.Multi-Statement Table-Valued Functions
Biz bu makalenin konusu olarak 1. maddeyi yani Scalar Fonksiyon konusu üzerinde duruyor olacağız.
Ancak öncelikli olarak UDF kullanmanın belli başlı faydalarını sıralamakla konuya başlayalım dilerseniz..
* Modüler programlamaya imkan verirler:
İlgili fonksiyonu bir defaya mahsus yaratırsınız sonrasında bu database'de nesne olarak depolanır ve istenilen sayıda çağırıp kullanabilirsiniz.
* Hızlı çalışma imkanı sunarlar:
UDF ler yapı olarak SP(Stored Procedure)'lere benzerler ve t-sql kodlarının yol açtığı derleme maliyetlerini azaltırlar. Bunu, çalışma planını ön belleğe alarak ve kendini tekrar eden uygulamaları kullanarak yaparlar. Bu şu demek oluyor; UDF'ler tekrar çözümlenmeye ya da yeniden optimize edilmeye ihtiyaç duymazlar ve nihayetinde kullanıcıya hızlı çalışma ortamları sunarlar.
* Network trafiğini azaltırlar:
Fonksiyon içersindeki WHERE elementi ile istenmeyen satırları eleyerek kullanıcıyla(client) haberleşmesini sağlayabilirsiniz.
---------------------------------------------------------
Scalar fonksiyonlar parametreli ya da parametresiz olabilirler ancak her 2 türdede geriye tek bir değer(single scalar value) döndürürler. Geriye dönüş değeri herhangi bir data tipi olabilir lakin text, ntext, image, cursor ve timestamp bunların dışındadır.
UDF lerin yapısını daha iyi analiz edebilmek için sistem tanımlı fonksiyonlara bir göz atmakta fayda var:
Örneğin SELECT SQRT(81) ifadesi parametre zorunlu bir sistem fonksiyondur ve geriye tek bir değer döndürür(float) ya da SELECT GETDATE() ifadesi parametre almayan bir sistem fonksiyondur ve geriye datetime tipinde bir değer döndürür. Sistem tanımlı (Built in system function) fonksiyonlarda olduğu gibi biz kullanıcı tarafındada bir takım UDF lere ihtiyaç duyarız. Bu UDF ler geriye tek bir satırlık sonuç da dönebilirler ya da geriye tablo da dönebilir.
Scalar functions genel yazım şekli (Sentaks) aşağıdaki gibidir:
CREATE FUNCTION Function_Name (@Params1 DataType, @Params2 DataType,..., @ParamsN DataType)
RETURNS Return_DataType
AS
BEGIN
Return Return_Datatype
END
<a href="Images/35_ScalarFunc.JPG" target="_blank"> <img src="Images/35_ScalarFunc.JPG" height="300" > </a>
Scalar fonksiyonu oluşturduktan sonra depolanan yer Programmability > Functions > Scalar - valued Functions seçeneği altındadır.
Scalar fonksiyonu çağırırken dikkat edilmesi gereken husus, fonksiyonun ön ekinde veritabanı sahibini belirtmenizdir. Scalar fonksiyonun örnek çağrılma şekli şöyledir:
SELECT dbo.Function_Name(varsa parametre adı buraya)
ya da 3 parça şeklinde de çağırabilirsiniz. (şayet farklı bir db den çağırma ihtiyacınız var ise)
SELECT VeritabanıAdı.dbo.Function_Name(varsa parametre adı buraya)
Yukarıdaki örnek kullanımda da görüldüğü gibi scalar fonksiyonlar SELECT elementleri içersinde kullanılabiliyor. Aynı şekilde WHERE elementi ile de birlikte kullanıp satırlarda eleme yapabilirsiniz. Bahse konu bu işleri stored procedure tarafında yapamazsınız.. Aralarındaki en belirgin fark bu'dur diyebiliriz.
Serinin bir sonraki bölümünde görüşmek üzere..