SQL’de Stored Procedure (Saklı Yordam) Nedir ?

Furkan Alaybeg
4 min readDec 26, 2019

--

Saklı yordamlar belli bir işlevi yerine getirmek için kullanılan kod parçacıklarıdır. Bu yazıda, SQL programlama dilinde Saklı Yordam (Store Procedure) yapısının ne olduğu, nerelerde kullanıldığını, yeni bir saklı yordam oluşturma, güncelleme, silme gibi işlemleri uygulamalı olarak anlatmaya çalışacağım.

Veritabanında CRUD gibi işlemlerde, her seferinde kodu tekrar yazmamız ve derlememiz gerekmektedir. Durum böyle olunca hem zaman hem de derleme açısından perormans kaybı olmaktadır. Bu gibi durumlarda Saklı Yordam (Store Procedure), programlamada kullanılan ifadelere göre kod yazmamızı sağlar. Böylece her seferinde aynı işlemleri yapma gereksinimi duymadan zamandan tasarruf etmiş oluruz. Örnek verecek olursak, veritabanında belli tarihler aralığında müşteriye ait siparişleri listemelek istediğimiz, SELECT SQL kodunu yazmak yerine sadece tarih aralığı ve müşteri numarası verilerek listeme gerçekleştirilmesi örnek olarak verilebilir.

  • Saklı Yordam, giriş (input) parametreleri alarak, çağrıldığında çıktı (output) değeri döndürür.
  • Veritabanında işlemler gerçekleştirebileceğimiz BEGIN…END, IF ELSE, WHILE, LOOP, REPEAT, BREAK, CONTINUE, CASE gibi ifadeler ile kullanılabilir.
  • Bir defa derledikten sonra, tekrar derlemeye gerek kalmaz. Veritabanında derlenmiş bir execution plan halinde saklanır.
  • Hata kontrolü yapmak için TRY-CATCH yapısı ile birlikte kullanılabilir.
  • User-defined fonksiyonlara (UDF) benezer. Ancak temel fark, UDF’ler diğer SQL ifadeleri ile çağrılırken, Saklı Yordamlar CALL ifadesi kullanılarak çağrılır.

Nerelerde Kullanılır

  • Tekrar kullanılabilirliği sağlamak istediğimizde kullanılır. Modülerlik sağlayarak, bir defa oluşturulan fonksiyonnu istediğimiz kadar çağırabiliriz.
  • Daha hızlı yürütme (execution) istediğimizde kullanılır. Çünkü kod ilk çalıştırıldığında derlenir, daha sonra sadece hafızada saklanan execution plan halini kullanarak, tekrar derlenme ve optimizeye ihtiyaç duymamaktadır.
  • Ağ trafiğini azaltmak istediğimizde kullanılır. Saklı Yordam SQL ifadelerini ağ ortamına çoklu göndermek yerine, toplu olarak çalıştırabilir. Böylece trafiği azaltıp performans artılır.
  • Daha iyi veri güvenliği sağlar. Kullanıcıların saklı yordam ifadelerini doğrudan çalıştırma izni olmadan, saklı yordam’da izin verilerek güvenlik sağlanır.

Uygulamalı Örnekler

Bu kısımda Saklı Yordamlara (Stored Procedure) ait örnekler MsSQL Server ortamında NORTHWIND veritabanı kullanılarak gerçekleştirilmektedir.

Saklı Yordam Oluşturma (CREATE Store Procedure)

Yeni bir Saklı Yordam oluşturmak istediğimizde, CREATE PROCEDURE komutu ve Yordam ismi yazılır, sonrasında @ işareti ile kullanılacak parametreler tanımlanır. Saklı Yordam ismi ve parametreler tanımlandıktan sonra, AS ifadesiyle devam edilip BEGIN ve END ifadeleri arasında saklı yordamda yapılmam istenen sorgu yazılır. Sorguyu çalıştırdığımızda, [OrdersByDate] isminda yeni bir saklı yordam oluşturulur. Oluşturulan bu yordam dakullanıcıdan şipariş başlangıç tarihi, sipariş bitiş tarihi ve siparişin gönderileceği şehir bilgileri girilmesi istenir. Böylece istenilen şehirde belli tarih aralığında şipariş sorgusunu yazmak yerine, oluşturulan saklı yordam çağrılarak gerçekleştirilir.

Saklı Yordam Çalıştırma (EXECUTE Store Procedure)

Oluşturduğumuz [OrdersByDate] saklı yordamını çalıştırmak istediğimizde EXEC komutunu kullanırız. Yukarıdaki örnekte, 01–07–1996 ve 01–07–1997 tarihleri arasında London şehrinde yapılan siparişleri listelendi.

Saklı Yordam Güncelleme (ALTER Store Procedure)

Daha önce oluşturduğumuz saklı yordam üzerinde değişiklik yapmak istediğimizde, ALTER ifadesi kullanılır. ALTER PROCEDURE ifadesinden sonra güncellemek istediğimiz saklı yordam ismi ve güncelleme sorgusu yazılır. Böylece ilk oluşturulan [OrdersByDate] saklı yordam da şehir’de yapılan siparişler yerine, belli tarihler arasında ülkede yapılan siparişler olarak güncellenmiş olur.

Saklı Yordam Silme (DROP Store Procedure)

Kullanılmayan Saklı Yordam yapısının silinmesi istendiğinde, DROP ifadesi kullanıllır. Yukarıdaki örnekte DROP PROCEDURE ifadesinden sonra silinmesi istenilen saklı yordam ismi yazılır. Sorgu çalıştırıldığında yordamın silinmesi gerçekleşir.

ENCRYPTED Saklı Yordam (ENCRYPTED Store Procedure)

Saklı Yordamın düzenlenebilirliğini kapatmak için şifreleme işlemi uygulanır. Şifrelenen Saklı Yordam üzerinde artık kendimiz dahi değişiklik yapamayız. Bu nedenle, şifreli saklı yordam oluştururken kodlarınında yedeğini bir yerde saklamamız ilerde değişiklik yapmak istediğimizde gerekli olabilir. Şifreli saklı yordam, normal saklı yordam oluşturur gibi parametrelerden sonra WITH ENCRYPTION ifadesi eklenerek oluşturulur.

RECOMPILE Saklı Yordam (RECOMILE Store Procedure)

Oluşturulan saklı yordamlar genelde Plan Cache’de saklanır. Ancak, RECOMPILE ifadesiyle oluşturulan saklı yordamlar Plan Cache’de saklanmaz, her çalıştırıldığında yeniden oluşturulur. Alınan parametrelere göre değişik Query Plan’ları oluşturuluyorsa, bu tür saklı yordam kullanılabilir. Böylece her çalıştırıldığında yeniden Query Plan oluşturulur. RECOMPILE saklı yordam, normal saklı yordam oluşturur gibi parametrelerden sonra WITH RECOMPILE ifadesi eklenerek oluşturulur.

Umarım faydalı bir yazı olmuştur. Diğer yazılarda görüşmek dileğiyle,
İyi Çalışmalar…

--

--

Furkan Alaybeg

Big Data Engineer | SQL | PySpark | Hadoop | Apache Airflow | Apache Flink