Arkadaşlar bu yazımızda SQL function ne olduğunu ve nasıl kullanacağımızı anlatacağız.
SQL server da birçok ön tanımlı fonksiyonlar (max, min gibi…) vardır. Ama biz kullanıcı tanımlı fonksiyonlar konusu üzerinde duracağız. Bu fonksiyonlar bizim yazdığımız kodlara göre geri değer veya tablo döndüren sql kodlarıdır.
view den en büyük farkı parametre alabiliyor olmasıdır. procedure dan farklı ise geriye bir değer dönüyor olmasıdır.
– fonksiyonlar istenilen değer tipinde dönüş yapabilir. INT, VARCHAR değer döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.
– fonksiyon, kendi içlerinde işlem yapıp geriye değer döndürebilirler.
– mesela bir fonksiyon 2 adet sayı alıp bunları toplayıp geriye toplamlarını döndürebilir.
NOT : Eğer QUERY ( Sorgu ) hakkında bilginiz yoksa öncelikle onu öğrenmenizi tavsiye ederiz. Örneklerimiz yaparken northwind örnek veri tabanını kullanacağız. northwind veri tabanı öğrenme aşamasında kullanılmak için yapılmış veri tabanıdır.
*NORTHWIND database ndeki terimler
Employees: Çalışanlar — Customer: Müşteri — Orders: Sipariş — Order Details : Sipariş Detayları, Products: Ürünler — Region: Bölge, kuzey, güney — shippers : nakliyatçılar — suppliers : satıcılar territories : saha, şehir — quantity : miktar, adet
Fonksiyon Nasıl Tanımlanır :
Go -- altında kırmızı çizgi oluşturmasın diye yazıyoruz
create function fncIsim()-– isim veriyoruz..
returns int -- bu fonksiyon geriye int döndürecekmiş onu yazıyoruz
as
begin -- { } burada skop görevi yapıyor..
return 1+2 –- yapmak istediğimiz işlemleri skoplar arasına yazıyoruz..
end -- { } burada skop görevi yapıyor..
go
Daha Önce Yazdığımız Fonksiyonda Düzenleme:
go
alter function fncIsim() -- alter ile düzenleme yapıyoruz
returns int -- bu fonksiyon geriye int döndürcekmiş
as
begin -- { }
return 1*2
end
go
Daha Önce Yazdığımız Fonksiyonu Çağırmak :
select dbo.fncIsim()
Parametre Alan Fonksiyon Nasıl Tanımlanır :
go
create function fnc_toplam(@sayi1 int, @sayi2 int)
returns int
as
begin
return @sayi1+@sayi2
end
go
Örnek 1: ProductID ye göre ürün ismi döndüren fonksiyon yazalım…
Go
create function fnc_urunismi(@urunID int)
returns nvarchar(max)
as
begin
declare @urunismi nvarchar(max) -- geriye döndüreceğim değişkeni tanımladım
select @urunismi = ProductName from Products where ProductID = @urunID
return @urunismi
end
go
Yazdığımız fonksiyonu çağıralım;
select dbo.fnc_urunismi(77)
Örnek 2 Sorgu: [Order Details] tablosundan productıd si 3 olanın toplam satışını veren sorgu yazalım;
select sum(UnitPrice * Quantity) as 'Toplam Satış' from [Order Details] where ProductID = 3
Örnek 2 Foksiyon: [Order Details] tablosundan productıd sine göre toplam satışını veren fonksiyonu yazalım
go
create function fnc_UrunToplamSatis(@UrunID int)
returns table
as
return select sum(UnitPrice * Quantity) as 'Toplam Satış' from [Order Details] where ProductID = @UrunID
go
Yazdığımız fonksiyonu çağıralım;
select * from dbo.fnc_UrunToplamSatis(3)
Yukarıda görüldüğü gibi örnek 2 lerde birinde sorgu diğerinde fonksiyon yazdık. İkisi de aynı işlemi yapar ama fonksiyon olana verdiğimiz parametreyi değiştirerek istediğimiz sonuçları alırız. Yani bir fonksiyon yazarak defalarca sorgu yazmaktan kurtuluruz.
Örnek 3: Orders ve customer tablosunu join ile birleştirip customer idsi ne göre contactname , address ve orders tablosunun tamamını getiren fonksiyon :
go
Create function fnc_musteriSiparis(@customerID nvarchar(5))
returns table
return select ContactName, Address, Orders.* from Orders inner join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID = @customerID
go
Arkadaşlar bu yazımız sql function konusunu örneklerle anlattık. Sizlere faydalı olmasını temenni ederim.
Başka bir yazımızda görüşmek üzere…