Parametresiz ve Parametreli Skaler Kullanıcı Tanımlı Fonksiyonlar,
Tekli ve Çoklu Tablo Döndüren Kullanıcı Tanımlı Fonksiyonlar,
Kullanıcı Tanımlı Fonksiyonlarda Kod Gizliliği: Şifreleme
/* Kullanıcı tanımlı fonksiyonlar dışarıdan parametre alabilirler, If Else gibi akış kontrol ifadeleri içerebilirler. Stored Procedure ve View nesnelerine benzerler. Bir view gibi select sorgularında kullanılabilir. Bir view ile parametreli işlem yapamazsınız, ancak bu KTF ile mümkündür. Bir stored procedure'den alınan sonucu select sorgunuzda etkin olarak kullanamazsınız ancak KTF ile bu da mümkündür. KTF'ler viewlerin esneklik ve kullanılabilirliği ile stored procedurelerin parametre kullanabilme, tampon hafızadan çağrılabilme, parse edilme, derlenme gibi birçok mimari yeteneklerinin birleşimi olarak düşünülebilir. KTF'ler 2'ye ayrılırlar. Skaler Kullanıcı Tanımlı Fonksiyonlar Tablo Kullanıcı Tanımlı Fonksiyonlar SKALER KTF Bir tek değer döndüren fonksiyondur. Birden fazla parametre alabilir, ancak sonuç olarak tek bir değer döndürür. Örnek: GETDATE() --> O anki sistem zaman bilgisini alarak geriye sadece bu bilgiyi döndürür. */ -- PARAMETRESİZ SKALER FONKSİYON create function fnc_kitapAdet() returns int -- geri dönüş veri tipi as begin declare @toplam int set @toplam = (select Count(kitapId) from kitap) return @toplam end select dbo.kitapAdet() -- dbo yazmazsak hata alırız. -- kitap tablosundaki kitap sayısını verir bu fonksiyon
-- PARAMETRELİ SKALER FONKSİYON KULLANIMI create function fnc_kitapFonksiyon(@kitapId int NULL) returns nvarchar(50) as begin declare @kitapAd nvarchar(50) set @kitapAd = (select kitap.kitapAd from kitap where kitapId=@kitapId) return @kitapAd end select dbo.kitapFonksiyon(1) -- burda ise parametre olarak verdiğimiz Id'ye göre -- kitap adlarını listeliyoruz.
-- TABLO DÖNDÜREN KTF /* Skalerden farkı geriye tek bir değer değil tablo tipinde değer döndürmesidir. */ CREATE function fnc_denemeFonksiyon(@ara nvarchar(50)) returns table as return select * from uye where uye.uyeAdSoyad like '%' + @ara + '%' select * from dbo.denemeFonksiyon('a') -- @ara parametresi içinde geçen uyeleri listeyen fonksiyonu -- yazdım. @ara' da 'a' harfi olduğunda içinde a harfi geçen -- uyeleri listeler
-- ÇOKLU İFADE İLE TABLO DÖNDÜREN FONKSİYONLAR create function fnc_kitapSayfaFonksiyon(@ilk int,@son int) returns @values table ( kitapAd nvarchar(50), kitapSayfa int ) as begin insert @values select kitapAd,kitapSayfa from kitap where kitapSayfa>@ilk and kitapSayfa<@son return end select * from dbo.kitapSayfaFonksiyon(100,200) -- kitap sayfa sayısı 100-200 arası olan kitapları ve tam sayfa sayısı listeleyen fonksiyon
-- Kullanıcı Tanımlı Fonksiyon Şifrelemek alter function fnc_kitapFonksiyon(@kitapId int NULL) returns nvarchar(50) with encryption -- bu satırla şifreliyoruz. as begin declare @kitapAd nvarchar(50) set @kitapAd = (select kitap.kitapAd from kitap where kitapId=@kitapId) return @kitapAd end -- yukarda daha önce yazdığım parametreli skaler fonksiyon -- örneğini tekrar yazdım ve şifreledim. exec sp_helptext 'dbo.kitapFonksiyon' -- bu satırı normalde çalıştırdığımızda fonksiyonun -- içinde kodlara erişebiliriz ancak şifrelendiğinden -- hata mesajı yazar. -- Ayrıca alter ile fonksiyonları düzenleyebilir -- drop ile fonksiyonları silebiliriz.