SQL Scalar-Valued Functions – Değer Fonksiyonları

SQL Scalar-Valued Functions – Değer Fonksiyonları

6 Eylül 2018 1 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 140
Yaklaşık okuma süresi : 4 DK
SQL Server Backup Database – Yedek Alma
SQL Table-Valued Functions – Tablo Fonksiyonları
SQL Scalar-Valued Functions – Değer Fonksiyonları
5 (100%) 3 Oy

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;

İlgili İçerik  SQL Identity Kolonun Sıra Atlama Sorunu

İ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. 😉

SQL Server Backup Database – Yedek Alma
SQL Table-Valued Functions – Tablo Fonksiyonları
Mustafa Bükülmez

Liseden, Ağ Sistemleri ve Yönetimi bölümünden mezun oldum. Üniversiteden (2 yıllık), Bilgisayar Programcılığı bölümünden mezun oldum. Şuanda da AÖF, Yönetim Bilişim Sistemleri bölümünde okumaktayım.

İlgili İçerik  SQL Server Management Studio Üzerinde Bazı Ayarlar

Uzmanlık alanlarım; Windows Sistemleri, HTML, CSS, C# ve SQL’dir.

Hobi olarak uğraştığım genel konular, Photoshop, After Affects, Corel Draw’dır.Film, YABANCI dizi, Anime izlemeyi ve Manga okumayı severim. Arkadaşlarımla yürüyüş yapmayı ve grup olarak aktivitelere gitmeyi severim. Geri kalan zamanlarımın tümü bilgisayar karşısında geçer.