SQL Scalar-Valued Functions – Değer Fonksiyonları , dersi ile sql eğitim setime devam ediyorum. Bu dersimizde yine bir fonksiyon göreceğiz anacak bu fonksiyonumuz sadece bir değer göndermektedir. Çok fazla kullandığım söylenemez ama fonksiyon yada prosedür kullanacaksam gerekli işlemi C# kodları ile hesaplayıp fonksiyona / prosedüre parametre olarak göndermektense değer veren fonksiyonlar ile halledip hiç c# ‘a girmeden bu işi halledebiliyoruz. Gelin SQL Scalar-Valued Functions – Değer Fonksiyonları nasıl yaptığımızı görelim.
SQL Scalar-Valued Functions – Değer Fonksiyonları
Lafı fazla uzatmadan nasıl yapacağımızı anlatayım. Tablo Fonksiyonları dersimizde de anlattığım gibi. SQL Scalar-Valued Functions ‘u oluşturuyoruz. Yeni fonksiyon oluştur dediğimizde bize yeni bir query sayfası açıyor. Bu kodları aşağıdaki gibi temizliyoruz ve düzenliyoruz. Ben saçma bir hesaplama yaptırdım..
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION fn_HesaplamaYap ( @deger1 as float , @deger2 as float ) RETURNS float AS BEGIN DECLARE @Sonuc float set @Sonuc = (@deger1 * @deger2) + ((@deger1 - @deger2) / 100) RETURN @Sonuc END GO
Gördüğünüz gibi fonksiyonumuz bu kadardı. Şimdi nasıl kullandığımızı görelim. Ama aklıma gelmişken önceki derslerimde bahsettiğim bir fonksiyonu göstereyim. Şimdi vereceğim fonksiyon case when ve select sorgusu içeriyor. Güzel bir örnek olmuş olur.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create FUNCTION [dbo].[fn_IsimBulGetir] (@Hangisi as int, @Kodu as nvarchar(50)) RETURNS nvarchar(100) AS BEGIN Declare @BulunanIsim as nvarchar(100) Set @BulunanIsim = Case When @Hangisi=0 Then (Select Per_Ad + ' ' + Per_Soyad from PERSONELLER WHERE Per_Kodu=@Kodu) When @Hangisi=1 Then (Select Mus_Adi from MUSTERILER WHERE Mus_Kodu=@Kodu) When @Hangisi=3 Then (Select Stk_Adi from STOKLAR WHERE Stk_Kodu=@Kodu) When @Hangisi=4 Then (Select Stk_br_Adi from STOK_BIRIMLERI WHERE OrtaGrp_Kodu=@Kodu) When @Hangisi=5 Then (Select Kul_Adi + ' ' + Kul_Soyadi from KULLANICILAR WHERE Kul_Kodu=@Kodu) else 'Bulunamadı' End Return @BulunanIsim END
Şimdi bu fonksiyonu açıklamam gerekirse;
İki parametre alıyor. İlk parametreden neyi bulacağınızı biliyoruz. İkinci parametreden ise Adını istediğim satırın Kodunu gönderiyorum.
Diyelim ki fonksiyona 0 ve P125 parametrelerine gönderdim. Burada bana Kodu P125 olan personelin adı ve soyadını verecek. Aynı şekilde 5 ve 5 gönderdim diyelim. Bu sefer de Kodu 5 olan kullanıcının adını ve soyadını getirecek.
Hatırlarsanız önceki derslerimde bahsetmiştim adını yazmak yerine kodunu yazmak daha mantıklı diye, işte bu şekilde bir fonksiyon sayesinde bir çok iç içe select yazmanın önüne de geçmiş oluyoruz. Yazımda da kolaylık sağlıyor.
Şimdi bu fonksiyonları önce tek başlarına sonra sorgularda nasıl kullandığımıza bakalım. Önceki dersimizdeki fonksiyon üzerinden örnreğimizi verelim.
Scalar valued function sql example
Tek başına kullanım;
SELECT dbo.fn_HesaplamaYap(100, 10)
Tek değer döndüğünden * from kullanmıyoruz.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION fn_Siparisler_Listesi_Tarihsel ( @ilk_tarih as nvarchar(20), @son_tarih as nvarchar(20) ) RETURNS TABLE AS RETURN ( SELECT 0 as a SELECT [Sip_RECno] AS RECNO ,[Sip_Masa_RECno] AS MASA_REC ,[Adisyon_No] AS ADİSYON ,[Da_Kac_Kisi_Var] AS MASA_SAYİ ,[Sip_Adet] AS SİP_ADET ,[Sip_Siparis_Kodu] AS SİP_KODU ,[Sip_Siparis] AS SİPARİS ,[Sip_Fiyat] AS FİYAT ,[Sip_Tarih] AS SİP_TARİH ,[Adisyon_Alindi] AS ADİSYON_DURUM ,[Sip_Tarih] AS SİP_TARİH ,[Sip_Alan] AS SİP_ALAN_KOD ,dbo.fn_IsimBulGetir(0, [Sip_Alan] ) AS SİP_ALAN ,dbo.fn_HesaplamaYap(Sip_Fiyat ,Sip_Adet ) as HESAP FROM SIPARISLER WHERE Masa_Sip_Tarih >= @ilk_tarih AND Masa_Sip_Tarih <= @son_tarih AND Aktif = 1 AND Masa_Sip_Iptal = 0 ) GO
Örnekte nasıl kullandığımızı görüyorsunuz. Bir sorgu içerisinde kullandığımızda select komutuna da gerek yoktur. Sadece fonksiyon adı yeterlidir.
NOT: Fonksiyonlarda, fonksiyon adı öncesinde DBO. komutu mutlaka olmalıdır. Aksi takdirde çalışmazlar.
SQL Scalar-Valued Functions – Değer Fonksiyonları , dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere.
Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.
Sağlıcakla ve Takipte Kalın.