MsSQL

Sql Server’da Fonksiyon Kullanımı

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)

 

 

 

 

Yorum Yap