T-SQL Fonksiyonlar

T-SQL (Transact-SQL), Microsoft SQL Server’da kullanılan SQL dilinin geliştirilmiş bir versiyonudur. Fonksiyonlar, T-SQL’de belirli işlemleri gerçekleştirmek ve sonuç döndürmek için kullanılan yapılardır.

Fonksiyon Türleri

T-SQL’de 3 temel fonksiyon türü vardır:

Scalar-Valued Functions: Tek bir değer döndürür. SELECT, WHERE gibi ifadelerde kullanılabilir. CREATE FUNCTION ile oluşturulur.

Scaler valued Functions yapısını aşağıdaki komutlarla oluştururuz. RETURNS INT dönen değerin int türünde olduğunu belirtmekteyiz.

CREATE FUNCTION dbo.Topla(@sayi1 INT, @sayi2 INT)
RETURNS INT
AS
BEGIN
    RETURN (@sayi1 + @sayi2)*5
END

İlgili fonksiyonun üzerine sağ tıklayıp modify komutu ile komutumuzu görüp değişiklik yapabiliriz.

Aşağıdaki komut ile çalıştırabiliriz.

SELECT dbo.Topla(5,3) AS Toplam
print dbo.topla(4,5) AS Toplam

Table-Valued Functions: İki çeşit yapıda bulunmaktadır.

Inline Table-Valued Functions: Tek bir SELECT ifadesi içerir. VIEW’lere benzer ama parametre alabilir.

Inline Table-Valued Functions yapısını aşağıdaki komutlarla oluştururuz. RETURNS TABLE dönen değerin Tablo türünde olduğunu belirtmekteyiz.

Bu yapıda begin end ifadesi kullanılmaz.

CREATE FUNCTION dbo.PersonelListesi(@PersonelID INT)
RETURNS TABLE
AS
RETURN 
(
    SELECT PersonelID, Adi, SoyAdi 
    FROM Personeller 
    WHERE PersonelID = @PersonelID
)

Aşağıdaki komut ile çalıştırabiliriz.

select *from dbo.PersonelListesi(9) as Personel

Multi-Statement Table-Valued Functions: Birden fazla T-SQL ifadesi içerebilir. Geçici tablo oluşturup doldurur.

CREATE FUNCTION dbo.YasliPersoneller(@yasSiniri INT)
RETURNS @tablo TABLE (PersonelID INT, Ad NVARCHAR(50), Yas INT)
AS
BEGIN
    INSERT INTO @tablo
    SELECT PersonelID, Adi, DATEDIFF(YEAR, DogumTarihi, GETDATE()) AS Yas
    FROM Personeller
    WHERE DATEDIFF(YEAR, DogumTarihi, GETDATE()) > @yasSiniri
    
    RETURN
END

Aşağıdaki komut ile çalıştırabiliriz.

SELECT * FROM dbo.YasliPersoneller(50)

Yazdığımız fonksiyonların komutuna başkasının erişmesini istemiyorsak With Encryption ifadesi kullanılmaktadır.

CREATE FUNCTION dbo.PersonelListesi(@PersonelID INT)
RETURNS TABLE
With Encryption
AS
RETURN 
(
    SELECT PersonelID, Adi, SoyAdi 
    FROM Personeller 
    WHERE PersonelID = @PersonelID
)

Sistem Fonksiyonları (Built-in Functions)

  • SQL Server tarafından önceden tanımlanmış fonksiyonlar

a. String Fonksiyonları

  • LEN(), SUBSTRING(), LEFT(), RIGHT(), UPPER(), LOWER(), REPLACE()

b. Matematiksel Fonksiyonlar

  • ABS(), ROUND(), CEILING(), FLOOR(), POWER(), SQRT()

c. Tarih-Zaman Fonksiyonları

  • GETDATE(), DATEADD(), DATEDIFF(), DATEPART(), YEAR(), MONTH(), DAY()

d. Dönüşüm Fonksiyonları

  • CAST(), CONVERT(), TRY_CONVERT()

e. Aggregate Fonksiyonlar

  • COUNT(), SUM(), AVG(), MIN(), MAX()

Fonksiyon Avantajları

  1. Aynı kodu tekrar tekrar yazmaktan kurtarır.
  2. Karmaşık işlemleri basit fonksiyonlara böler.
  3. Fonksiyonlar çoğu zaman daha verimli çalışır.
  4. Değişiklik yapmak daha kolaydır.

Fonksiyon Sınırlamaları

  1. Tablo değiştiren işlemler yapılamaz (INSERT, UPDATE, DELETE)
  2. Geçici tablo oluşturulamaz.
  3. PRINT komutu kullanılamaz.
  4. TRY-CATCH blokları kullanılamaz.
  5. Rastgele sayı üretilemez. (RAND())
  6. Zaman bağımlı işlemler yapılamaz. (GETDATE hariç)

Not: Aşağıdaki komut ile bir tablo üzerinde bulunan en son primary key değerini bulabiliriz. Bu işlemi max fonksiyonu ilede bulabiliriz.

select IDENT_CURRENT('YolcuBilgileri')
SELECT MAX(KayitNo) FROM YolcuBilgileri

Fonksiyonlar, T-SQL’de güçlü ve esnek bir programlama aracıdır. Doğru kullanıldığında kodun okunabilirliğini, yeniden kullanılabilirliğini ve performansını artırır.

Başka makalede görüşmek dileğiyle..

“De ki: ‘Ey kendilerinin aleyhine aşırı giden kullarım! Allah’ın rahmetinden ümidinizi kesmeyin. Şüphesiz Allah, bütün günahları affeder. Çünkü O, çok bağışlayandır, çok merhamet edendir.’ “  Zümer Suresi; 53. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir