Saklı Yordamlar (Stored Procedures)

Eyl 06, 2013

Saklı yordamlar SQL Server üzerinde tutulan Transact-SQL ifadeleridir. Belli bir görevi yerine getirebilmek amacıyla yapılandırılırlar. SQL Server üzerinde derlenirler. Belirlediğimiz şartlara göre, program içinden çağrılarak kullanılırlar. 
Transact-SQL deyimleriyle yazılan saklı yordamlar sadece ilk kez çalıştırıldıklarında derlenirler. Daha sonraki çalıştırma işlemlerinde derlenmezler. Bu sayede çalışmalarda hız kazanılmış olur. 
Birkaç çeşit saklı yordam vardır. Bunlardan bazıları şunlardır:

System Stored Procedure (Sistem Saklı Yordamları): 

sp_ ön eki ile başlayan saklı yordamlar, SQL Server tarafından tanımlanmış saklı yordamlardır. "Master" veritabanında saklanırlar. Bu saklı yordamlar, herhangi bir veritabanı üzerinde sistemle ilgili yönetimsel işlemler için kullanılırlar. 
 

Extended Stored Procedure (Genişletilmiş Saklı Yordamlar):

Genişletilmiş anlamında xp_ ön eki ile başlayan bu saklı yordamlar, SQL Server'ın dışında çalıştırılan dinamik bağlantı kütüphaneleridir (DLL). 
 

Local Stored Procedure (Yerel Saklı Yordamlar):

SQL Server üzerinde kullanıcılar tarafından saklı yordamlar oluşturulabilir. Bunlara da yerel saklı yordamlar denir. Oluşturulan veritabanının Stored Procedure alt başlığı altında, yerel saklı yordamlarla ilgili, saklı yordam ekleme, silme, düzeltme gibi işlemler gerçekleştirilebilir.
 

Oluşturulan veya var olan saklı yordamları kullanıldığında birçok avantaj elde edilir. Bunlardan birkaçı dolayısıyla saklı yordam kullanım sebepleri aşağıdaki gibidir:

•  Saklı yordamlar, SQL Server 'a esneklik ve hız kazandırırlar. 
•  Önceden derlenmiş olduğu için, normal kullanılan bir SQL sorgusunun tekrar tekrar çalıştırılmasına oranla daha fazla performans elde edilmesine sağlarlar. 
•  Bir kez yazılıp, tekrar tekrar kullanıldığı için modüler bir yapıda program geliştirilmiş olur. 
•  Aynı Transact-SQL cümleciğini birden fazla yerde kullanılacağı zaman, bunu bir saklı yordam haline getirerek, kullanımını sadece ismini çağırma ile gerçekleştirilebilir. 
•  Belirli girdi ve çıktı parametreleri olduğu için, saklı yordamların kullanımı ile güvenlik açısıdan yöneticiyi de sağlama almış olur. 
•  Ağ trafiğini azaltır. İstemci tarafından birçok satıra sahip SQL komutunun sunucuya gitmesindense, sadece saklı yordamın adının sunucuya gitmesi ağı daha az meşgul etmiş olur. 

Yerel Saklı Yordam Oluşturma

"Veritabani" isimli bir veritabanı oluşturulsun. Oluşan veritabanında "Kisi" isimli bir tablo oluşturulsun. Tablo kişinin ismini tutacak olan "KisiIsmi" (char) ve kişinin maaşını tutacak olan "Maas" (money) isimli alanları içersin.
 

Tablo üzerinde sağ tıklayıp Open Table (Tabloyu Aç) dedikten sonra Returns All Rows diyerek tabloya ikiden fazla kayıt girilsin.

Şimdi sıra yerel saklı yordamı oluşturmaya geldi. Oluşturulan veya var olan saklı yordamlar dışarıdan parametre alabilirler. Bu parametrelere göre tanımlanan işlemleri yaparlar ve/veya dışarıya değer kümesi dönderirler.
Veritabanı nesnelerinde Stored Procedure üzerinde sağ tuşa tıkladıktan sonra New Stored Procedure (Yeni Saklı Yordam) seçeneği seçilerek saklı yordam oluşturmak için ilk adım atılmış olur. 

En yüksek maaş alan ilk iki kişiyi listeleten bir saklı yordam yazılsın.

 

En yüksek maaş alan iki kişiyi bulmak için, ilk önce kişileri aldıkları maaşlara göre azalan bir şekilde sıralanması (ORDEY BY Maas DESC) gerekir. Maaşa göre sıralanan kişilerden, en üsten iki tanesi alınırsa (TOP 2), en yüksek maaş alan iki kişiyi elde edilmiş olunur.

Bu şekilde EnYuksekIlkIki isimli bir saklı yordam yordam oluşturuldu.

CREATE PROCEDURE EnYuksekIlkIki 
AS
SELECT TOP 2 * FROM Kisi ORDER BY Maas DESC
GO

Oluşan EnYuksekIlkIki isimli saklı yordamı çalıştırmak içinse aşağıdaki kodu Query Analyzer (Sorgu Çözümleyici) 'de yazılsın. Bir saklı yordamı çalıştırmak için T-SQL'de EXECUTE ya da exec deyimi kullanılır.

USE VeriTabani 
EXECUTE EnYuksekIlkIki

EXECUTE deyimi kullanılarak oluşturulan EnYuksekIlkIki isimli saklı yordamın çalıştırılması sonucunda aşağıdaki sonuçla karşılaşılır:

Yerel Saklı Yordamı Değiştirmek

Herhangi bir saklı yordam üzerinde çift tıklandığında, saklı yordam oluşturma penceresinin aynısı olan bir pencere açılacaktır. Buradan istenen değişiklikler yapılarak kayıt edildiğinde saklı yordam değiştirilmiş olur.

Yerel Saklı Yordamı Silmek

Saklı yordam üzerinde sağ tıklanarak açılan menüden Delete seçeneği ile saklı yordamı silme işlemi gerçekleştirilebilir.

Sistem Saklı Yordamı

Veritabanı nesneleri ve sunucu durumu hakkında bilgileri toplamak için büyük kolaylıklar sağlar. Sistem saklı yordamları sp_ öneki ile başlar.

  • Sp_help [object_name]: Belirlenmiş veritabanı nesneleri üzerindeki bilgileri sağlar. 
     
  • Sp_helpdb [database_name]: Belirlenmiş veritabanı üzerindeki bilgileri sağlar. 
     
  • Sp_helpindex [table_name]: Belirlenmiş tablo için dizin üzerindeki bilgileri sağlar. 

Transact-SQL ifadeleriyle sistem tablolarının sorgulanması için bir metod sağlar. 

  • DB_ID: Veritabanı ID'sini geri döndürür. 
     
  • USER_NAME (ID): Kullanıcı adını geri döndürür. 
     
  • COL_LENGTH (Sütun (Column)): Sütun genişliğini geri döndürür. 
     
  • STATS_DATE (Index): belirlenmiş içeriğin son güncellendiği tarihi geri döndürür. 
     
  • DATALENGTH (Veri Tipi): Herhangi bir veri tipi ifadesinin uzunluğunu geri döndürür.