Sql Server’da kullanıcı tanımlı fonksiyonlar, sql serverda tanımlı olan fonksiyonlar gibi aldığı parametreleri işleyerek geriye bir değer döndüren sql ifadeleridir. Özellikle procedurelerden en büyük farkı sorguların içinde direk kullanılabilmeleridir.
Fonksiyon Çeşitleri
1.Geriye sabit değer döndüren fonksiyonlar
2.Geriye Sorgu döndüren fonksiyonlar
3.Geriye tablo değişkeni döndüren fonksiyonlar
Geriye sabit değer döndüren fonksiyon oluşturma
CREATE FUNCTION fonksiyon_adi ( -- Parametrelerin eklendiği yer @param1 veritürü, @param2 veritürü ) RETURNS geri_dönecek_değerin_veritürü AS BEGIN -- Önce Geri dönecek değer tanımlanır. DECLARE @donen veritürü -- Sql ifadeleri dönen parametreye değer aktarımı gibi işlemler RETURN @donen END
Geriye Sorgu döndüren fonksiyon oluşturma
CREATE FUNCTION fonksiyon_adi ( -- Parametrelerin eklendiği yer @param1 veritürü, @param2 veritürü ) RETURNS TABLE AS RETURN ( -- Geriye dönecek select ile yazılan sorgu )
Geriye tablo değişkeni döndüren fonksiyon oluşturma
Geriye tablo döndüğü için select ile kullanırken from ifadesinden sonra fonksiyonun kullanılması gerekir.
CREATE FUNCTION fonksiyon_adi ( -- Parametrelerin eklendiği yer @param1 veritürü, @param2 veritürü ) RETURNS @tablo TABLE ( -- colonları buraya yazıyoruz colon1 veritürü, colon2 veritürü ) AS BEGIN -- Tablo değişkenin içini girilen parametreler ile doldur. RETURN END
Fonksiyon Üzerinde Değişiklik Yapma
Fonksiyon üzerinde değişiklik yapmak için yukarıdaki tanımlama şekillerinde olduğu gibi Create function.. yerine Alter function…. yaparak fonksiyon üzerinde değişiklik yapmak mümkündür.
Kullanıcı Tanımlı Fonksiyonları Silme
View, Procedure lerde olduğu gibi Drop ile siliyoruz.
Drop function function_adi
Sql Server Fonksiyon Örnekleri
Örneklerde kullanılan kütüphane veritabanı için tıklayın.
Örnek: iki metni birleştirip geriye tek metin döndüren fonksiyonu yazınız.
Create function fn_birlestir(@kelime1 varchar(20),@kelime2 varchar(20)) returns varchar(41) as Begin return rtrim(@kelime1)+space(1)+ rtrim(@kelime2) End
Kullanım:Oluşturduğunuz fonksiyon ile öğrencinin adını ve soyadını birleştirip geriye döndürün.
Select dbo.fn_birlestir(ograd,ogrsoyad) from ogrenci
Örnek: sign metodunu yapınız.(sing metodu sayi pozitif ise 1, negatif ise -1, 0 ise 0 döndürür.)
Create function fn_isaret(@sayi int) returns int as Begin if(@sayi<0) return -1 if(@sayi=0) return 0 return 1 End
Kullanım:Fonksiyonların kullanımı
select dbo.fn_isaret(10) select dbo.fn_isaret(-10) select dbo.fn_isaret(0)
Örnek:Öğrenci numarası girilen öğrencinin okuduğu kitap sayısını getiren fonksiyon
Create function fn_kitap_sayisi(@ogrno int) returns int as Begin return (select count(*) from islem where @ogrno=ogrno) End
Kullanım:Öğrencinin numarası girilen öğrencinin okuduğu kitap sayısını, adını ve soyadını getiren
select ograd,ogrsoyad,dbo.fn_kitap_sayisi(12) from ogrenci order by 3 desc
Örnek: replicate metodunun benzerini tekrarla adında oluşturunuz.
Select replicate('x',12) --Çıktı:xxxxxxxxxxxx
Fonksiyonun oluşturulması
Create function tekrarla(@kelime varchar(10),@sayi int) returns varchar(max) as Begin Declare @sonuc varchar(max)='' Declare @i int=0 while(@i<@sayi) Begin Set @sonuc+=@kelime Set @i+=1 End return @sonuc End
Kullanım:
Select dbo.tekrarla('x',12)
Örnek:Girilen 1. parametreninn 2.parametreye tam bölünüp bölünmediğini yazdıran fonksiyonu yapınız.
create function fn_BolunurMu (@s1 int ,@s2 int) returns varchar(10) as begin Declare @mesajver varchar(10) if(@s1%@s2=0) set @mesajver='Bölünür' else set @mesajver='Bölünmez' return @mesajver End
Kullanım:
select dbo.fn_BolunurMu(15,5)
Örnek: Girilen iki parametreyi birbirinden çıkarıp geriye pozitif sonuc döndüren fonksiyon oluşturunuz.
Yöntem 1:
create function fn_PozitifDondur(@s1 int,@s2 int) returns int as begin return abs(@s1-@s2) End
Kullanım:
Select dbo.fn_PozitifDondur(15,20)
Yöntem 2
create function fn_pozitif(@s1 int, @s2 int) returns int as begin declare @sonuc int =@s1-@s2 if(@sonuc<0) begin Select @sonuc=(@sonuc* -2)+@sonuc End return @sonuc End
Kullanım:
select dbo.fn_pozitif(2,10)
Örnek: Faktöriyel hesaplayan fonksiyonu yapınız.
create function fn_hesapla (@sayi int) returns int as begin Declare @sonuc int = 1 Declare @i int =1 while(@i<=@sayi) begin select @sonuc *= @i select @i+=1 End return @sonuc End
Kullanım:
Select dbo.fn_hesapla(5)
Örnek: Sayının kuvvetini hesaplayan fonksiyonu yapınız.(power fonksiyonunu yapın)
Create function fn_kuvvet(@k1 int,@k2 int) returns int as begin Declare @sonuc int=1 Declare @i int=1 while(@i<=@k2) begin Select @sonuc*=@k1 select @i+=1 End return @sonuc End
Kullanım:
Select dbo.fn_kuvvet(5,2)