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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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.
1 2 3 |
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.
1 2 3 4 5 6 7 |
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.
1 2 3 |
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.)
1 2 3 4 5 6 7 8 9 10 11 12 |
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ı
1 2 3 4 5 |
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
1 2 3 4 5 6 7 8 |
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
1 2 3 |
select ograd,ogrsoyad,dbo.fn_kitap_sayisi(12) from ogrenci order by 3 desc |
Örnek: replicate metodunun benzerini tekrarla adında oluşturunuz.
1 2 3 4 |
Select replicate('x',12) --Çıktı:xxxxxxxxxxxx |
Fonksiyonun oluşturulması
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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:
1 2 3 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 2 3 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
create function fn_PozitifDondur(@s1 int,@s2 int) returns int as begin return abs(@s1-@s2) End |
Kullanım:
1 2 3 |
Select dbo.fn_PozitifDondur(15,20) |
Yöntem 2
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 2 3 |
select dbo.fn_pozitif(2,10) |
Örnek: Faktöriyel hesaplayan fonksiyonu yapınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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:
1 2 3 |
Select dbo.fn_hesapla(5) |
Örnek: Sayının kuvvetini hesaplayan fonksiyonu yapınız.(power fonksiyonunu yapın)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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:
1 2 3 |
Select dbo.fn_kuvvet(5,2) |
[…] SQL Server Kullanıcı Tanımlı Fonksiyon Kullanımı […]