MSSQL Server Stored Procedure Nedir

MSSQL Server Stored Procedure, bir SQL komut kümesinin (SELECT, INSERT, UPDATE, DELETE vb.) bir araya getirilip, belirli bir işlem ya da sorgu setinin tekrarlı olarak kullanılabilmesi için veritabanı üzerinde saklanan, adlandırılmış bir program parçasıdır. Bu prosedürler, genellikle belirli bir işlemi tekrarlamak ve veri üzerinde işlem yapmak amacıyla kullanılır. Oluşturulan bu procedure’ler sadece ilk çalıştığında derlenir. Bu sebepten procedure her çalıştığında ilk oluşturulan execution plan yapısını kullanır. Derleme süresine takılmadığı için performans anlamında çok hızlı olacaktır. Sorgunun aynı  execution plan ile çalışması bazen parameter sniffing problemine yol açabilir.

Stored Procedure Özellikleri:

  1. Prosedür, SQL Server veritabanında saklanır ve istenildiği zaman çalıştırılabilir.
  2. Giriş parametreleri alarak daha dinamik hale getirilebilir.
  3. Aynı işlem defalarca yapılacaksa, prosedür yazıp her seferinde tekrar kullanabilirsiniz.
  4. SQL Server, prosedürün derlenmiş bir planını tutar, bu da her seferinde sorgu optimizasyonu yapmasına gerek kalmadığı için performans sağlar.

Stored Procedure Oluşturma

Aşağıda basit bir Stored Procedure örneği bulunmaktadır. Bu örnekte, bir kullanıcının bilgilerini eklemek için bir prosedür yazacağız.

1. Örnek:

Önce Users adında bir tablo oluşturalım:

CREATE TABLE Users (
    UserID INT PRIMARY KEY IDENTITY(1,1),
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Email NVARCHAR(100)
);

Aşağıda, yeni bir kullanıcı eklemek için bir stored procedure oluşturuluyor:

CREATE PROCEDURE AddUser
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50),
    @Email NVARCHAR(100)
AS
BEGIN
    -- Yeni bir kullanıcı eklemek için INSERT komutunu çalıştırıyoruz.
    INSERT INTO Users (FirstName, LastName, Email)
    VALUES (@FirstName, @LastName, @Email);

    -- Eklenen kullanıcının UserID'sini döndür.
    SELECT SCOPE_IDENTITY() AS NewUserID;
END;
  • CREATE PROCEDURE AddUser: AddUser adında bir stored procedure oluşturuluyor. Bu prosedür 3 parametre alır: @FirstName, @LastName, ve @Email.
  • INSERT INTO Users (FirstName, LastName, Email): Parametreleri kullanarak Users tablosuna bir kayıt ekleriz.
  • SELECT SCOPE_IDENTITY(): Son eklenen kaydın UserID değerini döndürür. Bu, eklenen kullanıcının otomatik artan ID değerini almak için kullanılır.

2. Stored Procedure Çalıştırma

Bu prosedürü çalıştırmak için şu komutu kullanabilirsiniz:

EXEC AddUser @FirstName = 'Yunus', @LastName = 'Yücel', @Email = 'info@yunusyucel.com';

Bu komut, Users tablosuna ‘Yunus’ adında, ‘Yücel’ soyadında ve ‘info@yunusyucel.com’ e-posta adresine sahip bir kullanıcı ekleyecek. Ayrıca, yeni kullanıcının UserID değeri döndürülecektir.

3. Stored Procedure Kullanımı ile Parametreler

Stored Procedure’ler parametreler alabilir ve bu parametreler ile veri üzerinde işlem yapılabilir. Aşağıdaki örnekte, kullanıcıların soyadına göre listeleme yapan bir prosedür oluşturulmaktadır.

Stored Procedure: Kullanıcıları Soyadına Göre Listeleme

CREATE PROCEDURE GetUsersByLastName
    @LastName NVARCHAR(50)
AS
BEGIN
    SELECT UserID, FirstName, LastName, Email
    FROM Users
    WHERE LastName = @LastName;
END;

Procedure çalıştıralım:

EXEC GetUsersByLastName @LastName = 'Yücel';

Bu komut, LastName değeri ‘Yücel’ olan tüm kullanıcıları listeleyecektir.

4. Parametre Olmadan Stored Procedure Çalıştırma

Parametre almayan prosedürler de oluşturulabilir. Aşağıdaki prosedür, tüm kullanıcıları listelemek için yazılmıştır.

CREATE PROCEDURE GetAllUsers
AS
BEGIN
    SELECT UserID, FirstName, LastName, Email
    FROM Users;
END;

Bu prosedürü çalıştırmak için:

EXEC GetAllUsers;

Bu komut, Users tablosundaki tüm kayıtları döndürecektir.

5. Stored Procedure’de Hata Yönetimi

Stored Procedure’lerde hata yönetimi de önemlidir. SQL Server, hata oluştuğunda özel hata mesajları döndürmenize olanak tanır. Aşağıdaki örnekte, hata kontrolü yapan bir prosedür örneği bulunmaktadır.

CREATE PROCEDURE AddUserWithErrorHandling
    @FirstName NVARCHAR(50),
    @LastName NVARCHAR(50),
    @Email NVARCHAR(100)
AS
BEGIN
    BEGIN TRY
        INSERT INTO Users (FirstName, LastName, Email)
        VALUES (@FirstName, @LastName, @Email);
    END TRY
    BEGIN CATCH
        -- Hata mesajı ve hata kodu döndürülür.
        SELECT ERROR_MESSAGE() AS ErrorMessage, ERROR_NUMBER() AS ErrorCode;
    END CATCH
END;

Bu prosedür, bir hata meydana geldiğinde, hata mesajını ve hata kodunu döndürecektir.

6. Geriye değer döndüren stored procedures yapısı

Aşağıdaki komut ile ilgili procedure geriye bir değer dönmektedir. Aşağıdaki ifade ile geriye dönen değeri elde etmeyiz.

CREATE PROC URUNFIYAT
 @FIYAT  MONEY
AS
SELECT*FROM Urunler WHERE BirimFiyati>@FIYAT
RETURN @@ROWCOUNT

EXEC URUNFIYAT 50

Kaç ürün etkilendiğini görmek için aşağıdaki komut kullanılmaktadır.

declare @sonuc int
EXEC @sonuc=   URUNFIYAT 50
print convert(varchar(100),@sonuc)+' '+'ürün etkilenmiştir.'

7. Output parametresi ile geriye değer döndüren stored procedure yapısı.

CREATE PROC ORNEK23
(
 @ID INT,
 @ADI NVARCHAR(50) OUTPUT,
 @SOYADI NVARCHAR(50) OUTPUT
)
AS
SELECT @ADI=Adi,@SOYADI=SoyAdi from Personeller where PersonelID=@ID

Yukarıdaki komutumuzda id değerini alıp kullanıcının adı ve soyadını output parametresi olarak dönmektedir.

declare @adi varchar(10), @soyadi varchar(10)
exec ORNEK23 5,@adi OUTPUT,@soyadi OUTPUT
SELECT @adi+' '+@soyadi

Stored procedured üzerinde varsayılan değerler set edebiliriz. Şimdi bir örnek üzerinden konuya değerlendirelim. Eğer herhangi bir değer girilmezse varsayılan değer set edilecektir. Aşağıdaki resim dikkat edilirse. Girilen kolon haricinde diğer değerler default olan değerlerdir.

CREATE PROC VARSAYILAN        

@ADI  NVARCHAR(50)='BELIRTILMEDI',
@SOYADI NVARCHAR(50)='BELIRTILMEDI',
@SEHIR NVARCHAR(50)='BELIRTILMEDI'
AS
INSERT Personeller(Adi,SoyAdi,Sehir)VALUES(@ADI,@SOYADI,@SEHIR)

EXEC dbo.VARSAYILAN 'TALAT','YUCEL' ,'ELAZIG'

EXEC dbo.VARSAYILAN 'KADIR'

EXEC dbo.VARSAYILAN 'IBRAHIM','YUCEL'

EXEC dbo.VARSAYILAN 

Stored Procedure’ler, veri manipülasyonlarını, raporlama işlemlerini ve veritabanı üzerinde yapılacak diğer işlemleri daha verimli ve güvenli hale getiren güçlü araçlardır. Aynı işlemi defalarca çalıştırmak yerine, SQL Server üzerinde bir kez yazıp tekrar tekrar kullanabilirsiniz. Bu, veritabanı yönetimini daha düzenli ve hatasız hale getirebilir.

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

“Allah içinizden iman edenlerin ve kendilerine ilim verilenlerin derecelerini yükseltir.” Mücâdele – 11

Author: Yunus YÜCEL

Bir yanıt yazın

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