6 Şubat 2017 Pazartesi

Kullanıcı Tanımlı Fonksiyonlar

Merhaba arkadaşlar,

Bugün sizlere SQL Server üzerinde kullanıcı tanımlı fonksiyonlardan bahsedeceğim.

Fonksiyonlar SQL Server'da işimizi kolaylaştırmak için ve sürekli tekrar eden querylere kolaylıkla erişim sağlamamız için yaratılan nesnelerdir. Fonksiyonlara SQL Server'da programmability altındaki functions kısmından ulaşabiliriz.





















SQL Server'da yerleşik olarak tanımlanmış, işimiz kolaylaştıran fonksiyonlar vardır.
Örnek vermek gerekirse; getdate() sistem fonksiyonu kullanarak o anın tarih ve saat değerini alabilmekteyiz. Fakat biz bu daha önceden belirlenmiş fonksiyonlar haricinde, kendi amacımız doğrultusunda fonksiyonlar tanımlamak istersek ne yaparız?

Kullanıcı Tanımlı Fonksiyonlar


SQL Server 2000 ile hayatımıza giren kullanıcı tanımlı fonksiyonlar sayesinde yerleşik fonksiyonlar haricinde kendimiz fonksiyon yaratabilmekteyiz. Bu fonksiyonlar 2 ana alt başlıkta toplanmaktadır.

  • Scalar Valued Functions
  • Table Valued Functions


Scalar Valued Functions


Skaler fonksiyonlar bize tek bir değer döndürmektedir. Örnek vermek gerekirse getdate() sistem fonksiyonu bir skaler fonksiyondur. Çünkü çalıştırıldığında, bize tarih ve saat olmak üzere tek bir değer döndürmektedir.

Scalar Function SYNAX

create function fonksiyonadı(parametreler)
returns geri_dönüş_tipi
as 
begin
sql sorguları
return geri_dönüs_degeri
end

Örnek vermemiz gerekirse;
 Dışarıdan alınan iki sayıyı toplayıp bize geri döndüren bir scalar fonksiyon tanımlayalım.








Table Valued Functions


Skaler fonksiyonlardan tek farkı geriye tablo döndürmesidir. Viewlerle benzerlik gösterirler ancak dışarıdan parametre alabilmektedirler.Biz table valued functionsları  from deyiminden sonra da referans tablo olarak kullanabilmekteyiz. Table Valued Functions kendi içerisinde ikiye ayrılmaktadır. Bunlar;
  • Inline TVFs
  • Multi Statement TVFs

Inline TVFs

Geriye tablo döndürebilen ve kompleks olmayan işlemler için kullanılan fonksiyonlardır.

Inline TVF Syntax:

create function fonksiyonadı(parametreler)
returns table
as 
return select ifadesi

Örnek vermek gerekirse;
AdventuresWork2014 üzerindeki production.product tablosu üzerinde dışarıdan girilen productid'ye göre ürünleri listeleyen bir inline tvf oluşturalım.





Çalıştırıldığında çıktımız şu şekilde olacaktır.








Multi Statement TVFs


View ve Stored Procedure birleşimi olarak düşünülebilir. Daha compleks işlemler yapmak için kullanılır. Multi Statement TVF oluştururken returns deyiminden sonra kendimiz bir tablo yaratarak manuel olarak bu tabloya insert işlemi yapıp tablomuzu oluşturmaktayız.

Multi Statement TVFs Syntax:

create function fonksiyonadı(parametreler)
returns @tabloadı(parametreler)
(
@tablo tanımlamaları
)
as 
begin
tabloyu oluşturan işlemler
return 
end

Örnek vermemiz gerekirse;

AdventuresWork2014 üzerindeki person.person tablosu üzerinde dışarıdan girilen full ve last string ifadelerine  göre kişileri uzun ve kısa adlarıyla listeleyen bir multi statement tvf oluşturalım.



















select * from getinfo('full') komutunu çalıştırdığımızda;





select * from getinfo('last') komutunu çalıştırdığımızda;



olarak tablomuz karşımıza gelecekti.

TVF ve Stored Procedure Arasındaki Farklar


TVF ve stored procedure'ler birbirlerine karıştırılmaktadır. Bunlar arasındaki önemli farklara bakacak olursak

  • Fonksiyonlar geriye bir değer veya tablo döndürmek zorundadır.
  • Fonksiyonlar select deyimi ile kullanılırlar. Stored procedure Execute/exec komutları ile çalıştırılırlar.
  • Fonksiyonlar join yapısı içerisinde kullanılabilirken sp'ler join içerisinde kullanılamaz.
  • Bir fonksiyon stored procedure çalıştıramaz fakat stored procedure'ler fonksiyonları çalıştırarak bu fonksiyonlardan faydalanabilmektedirler.
  • Fonksiyonlar transaction yapısını desteklemezler.
  • Fonksiyonlar tablo türü değişkenlerle kullanılabilirler(temp table hariç), Stored procedure'ler hem temp table hem de tablo türü değişkenlerle kullanılabilirler.
  • Fonksiyonlar try-catch yapısını desteklememektedir. 



Konu ile ilgili video:



ek zorundadır.


Hiç yorum yok:

Yorum Gönder