SQL Server’da veritabanı yönetimi ve veri manipülasyonu işlemleri, doğru yapıldığında oldukça verimli olabilir. Bununla birlikte, karmaşık ve sık tekrarlanan işlemleri yönetmek, yalnızca SQL sorguları kullanarak yapılabilir. SQL Server’da bu tür işlemleri daha etkili bir şekilde yönetmek için Stored Procedures (Saklı Yordamlar) ve User Defined Functions (Kullanıcı Tanımlı Fonksiyonlar – UDF) gibi özellikler bulunmaktadır. Bu makalede, SQL Server’da Stored Procedure ve User Defined Function kullanımı ele alınacak ve her iki yapının nasıl çalıştığına dair örnekler sunmaya çalışacağım.
Stored Procedure Nedir ve Ne Zaman Kullanılır?
Stored Procedure, SQL Server’da sıklıkla kullanılan bir özellik olup, birden fazla SQL komutunu bir arada tutarak bir işlem kümesi oluşturur. Bir stored procedure, önceden belirlenen bir işlevi yerine getiren, veritabanı üzerinde çalışan bir tür “program” gibi düşünülebilir. Yani, SQL komutları bir defa yazılır ve sonra defalarca çağrılarak kullanılır.
Stored Procedure Kullanmanın Avantajları
- Kod Tekrarını Azaltır: Aynı SQL komutlarını tekrar tekrar yazmak yerine, bir stored procedure yazıp ihtiyacınız olduğunda tekrar çağırabilirsiniz.
- Performans Artışı Sağlar: SQL Server, stored procedure’leri bir kez derler ve çalıştırılabilir hale getirir. Böylece her seferinde SQL sorgusunun yeniden derlenmesine gerek kalmaz.
- Güvenlik: Kullanıcılar, yalnızca belirli stored procedure’leri çalıştırarak veritabanına erişebilirler. Böylece, veri üzerinde doğrudan işlem yapmak yerine yalnızca izin verilen prosedürleri çalıştırabilirler.
- Bakım Kolaylığı: SQL Server’daki stored procedure’ler merkezi bir yerde tutulur. Değişiklik yapmak istediğinizde sadece bir kez değişiklik yapmanız yeterlidir.
Stored Procedure Kullanım Senaryoları
Stored procedure’ler, aşağıdaki durumlar için idealdir:
- Karmaşık veritabanı işlemleri: Birden fazla SQL komutunun bir arada çalıştırılması gerektiğinde.
- Performans ihtiyaçları: Sıklıkla tekrarlanan sorguların daha hızlı çalıştırılması gerektiğinde.
- Güvenlik: Kullanıcıların yalnızca belirli işlemleri yapması gerektiğinde.
Stored Procedure Yazma ve Kullanma
Bir stored procedure yazmak için, CREATE PROCEDURE komutunu kullanırız. Aşağıda, blog sitesindeki yazıların durumunu güncelleyen basit bir stored procedure örneği bulunmaktadır:
CREATE PROCEDURE UpdatePostStatus
@PostId INT,
@Status NVARCHAR(50)
AS
BEGIN
UPDATE BlogPosts
SET Status = @Status
WHERE PostId = @PostId;
END;
Yukarıdaki örnekte, UpdatePostStatus adında bir stored procedure oluşturulmuştur. Bu prosedür, belirli bir yazının durumunu (Status) güncellemek için kullanılacaktır. Parametre olarak, güncellenecek yazının PostId’si ve yeni durumu (Status) alınır.
Bu prosedürü çağırmak için şu SQL komutunu kullanabilirsiniz:
EXEC UpdatePostStatus @PostId = 101, @Status = 'Yayında';
Bu işlem, PostId değeri 101 olan yazının durumunu ‘Yayında’ olarak günceller.
User Defined Functions (UDF) Nedir?
User Defined Function (Kullanıcı Tanımlı Fonksiyon – UDF), veritabanında özel olarak oluşturulmuş ve bir işlem gerçekleştiren SQL fonksiyonlarıdır. Bu fonksiyonlar, SQL sorgularında tekrar kullanılabilir ve sonuç olarak bir değer döndürür. SQL Server’da iki tür UDF bulunur:
- Scalar Functions: Tek bir değer döndüren fonksiyonlardır. Örneğin, sayısal bir hesaplama veya string manipülasyonu gibi işlemler için kullanılır.
- Table-Valued Functions: Bir tablo döndüren fonksiyonlardır. Bu tür fonksiyonlar, sorgulara dahil edilebilen tablolara benzer sonuçlar üretir.
UDF Kullanmanın Avantajları
- Tekrar Kullanılabilirlik: UDF’ler, bir SQL sorgusunda veya stored procedure’de defalarca kullanılabilir.
- Veri Manipülasyonu: Veriyi işlemek, dönüştürmek ve hesaplamak için kullanılır.
- Sorgu Okunabilirliği: Sık kullanılan hesaplamaları veya veri dönüşümlerini merkezi bir fonksiyona yerleştirerek, sorgularınızın daha okunabilir ve bakımı daha kolay hale gelir.
UDF Kullanım Senaryoları
UDF’ler, özellikle aşağıdaki durumlar için kullanışlıdır:
- Veritabanındaki veriler üzerinde özel hesaplamalar yapmak.
- Sıklıkla kullanılan hesaplamaları veya dönüşümleri merkezi bir fonksiyon olarak tanımlamak.
- SQL sorgularına özelleştirilmiş mantık eklemek.
Scalar UDF Örneği
Bir blog sitesinde, bir yazının toplam okuma süresini hesaplamak için bir fonksiyon yazabiliriz. Bu hesaplama, yazının kelime sayısına göre yapılacaktır. İşte basit bir Scalar UDF örneği:
CREATE FUNCTION CalculateReadingTime (@WordCount INT)
RETURNS INT
AS
BEGIN
RETURN @WordCount / 200;
END;
Yukarıdaki örnekte, CalculateReadingTime fonksiyonu, verilen kelime sayısını (WordCount) kullanarak okuma süresini dakikalar cinsinden hesaplar. Bu fonksiyonu bir SELECT sorgusunda şu şekilde kullanabilirsiniz:
SELECT Title, dbo.CalculateReadingTime(WordCount) AS ReadingTimeInMinutes
FROM BlogPosts;
Bu sorgu, her bir blog yazısının okuma süresini dakikalar cinsinden döndürecektir.
Table-Valued UDF Örneği
Bir Table-Valued Function (TVF), birden fazla satır ve sütun döndürebilir. Aşağıdaki örnekte, belirli bir yazı kategorisindeki tüm yazıları döndüren bir TVF oluşturulmuştur:
CREATE FUNCTION GetPostsByCategory (@CategoryName NVARCHAR(50))
RETURNS TABLE
AS
RETURN
(
SELECT PostId, Title, Content, PublishedDate
FROM BlogPosts
WHERE Category = @CategoryName
);
Bu fonksiyon, belirli bir kategoriye ait tüm yazıları döndüren bir tablo döndüren TVF’dir. Fonksiyonu çağırmak için şu SQL komutunu kullanabilirsiniz:
SELECT * FROM dbo.GetPostsByCategory('Teknoloji');
Bu sorgu, ‘Teknoloji’ kategorisindeki tüm blog yazılarını listeleyecektir.
Stored Procedure ve UDF Arasındaki Farklar
- Dönüş Değeri: Stored procedure’ler genellikle bir değer döndürmez, ancak çıktı parametreleri aracılığıyla sonuç dönebilir. UDF’ler ise her zaman bir değer döndürür.
- Kullanım: Stored procedure’ler genellikle veri manipülasyonu, güncelleme, silme gibi işlemler için kullanılır. UDF’ler ise hesaplamalar veya dönüşümler için daha yaygın olarak kullanılır.
- Kapsam: Stored procedure’ler daha geniş ve karmaşık işlemleri gerçekleştirebilirken, UDF’ler genellikle bir değer döndürmeye odaklanır.
Sonuç
SQL Server’da Stored Procedures ve User Defined Functions (UDF), veritabanı yönetimini kolaylaştıran ve geliştiricilerin veritabanı işlemlerini daha verimli hale getirmesini sağlayan güçlü araçlardır. Stored procedure’ler, birden fazla SQL komutunu tek bir işlemde birleştirirken, UDF’ler daha spesifik hesaplamalar ve veri manipülasyonları için idealdir. Her iki yapı da, kodunuzu daha modüler hale getirmenizi, performansınızı artırmanızı ve veritabanı üzerinde daha güvenli ve tutarlı işlemler gerçekleştirmenizi sağlar.
Yeni satırlarda görüşmek üzere . . .
Yorumlar