Ana içeriğe geç

Stored Procedure

Saklı Yordam

Türkçe karşılığı
saklı prosedür
Okunuşu
stord prısicır

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/stored-procedure

Kısaca

Stored procedure, veritabanında saklanan adlandırılmış bir SQL ifadeleri kümesidir; uygulamalar her sorguyu göndermek yerine onu tek çağrıyla çalıştırabilir.

Stored procedure nedir?

Stored procedure, veritabanının içinde yaşayan, yeniden kullanılabilir bir programdır. Bir ya da daha fazla SQL ifadesini, çoğu zaman değişkenler, koşullar ve döngülerle birlikte bir ad altında toplar; girdi parametreleri alabilir ve sonuç döndürebilir. Uygulamalar onu veritabanına göre CALL ya da EXEC gibi tek bir komutla çalıştırır.

Bir procedure oluşturduğunuzda veritabanı kodunu saklar ve birçok sistemde onun için hazırlanmış bir yürütme planını yeniden kullanabilir. Mantık verinin yanında çalıştığı için procedure, stoğu kontrol etmek, sipariş oluşturmak ve envanteri güncellemek gibi birkaç ilişkili adımı tek bir ağ gidiş-dönüşünde gerçekleştirebilir. Her veritabanının bunun için kendi prosedürel dili vardır; PostgreSQL'de PL/pgSQL ya da SQL Server'da T-SQL gibi.

Stored procedure'ü telefondaki bir hızlı arama tuşu gibi düşünün: her seferinde tüm rakamları çevirmek yerine, kayıtlı bir diziyi çalıştıran tek bir tuşa basarsınız. Stored procedure'ler bankacılıkta, raporlamada ve iş kurallarının veriye dokunan her uygulama için tek bir yerde uygulanmasını isteyen büyük kurumsal sistemlerde yaygındır. Güvenliği de artırabilirler; çünkü kullanıcıların alttaki tablolara doğrudan erişimi olmadan bir procedure çalıştırmasına izin verilebilir.

Stored procedure'ler çoğu zaman fonksiyonlar ve trigger'larla karıştırılır. Bir veritabanı fonksiyonu genellikle bir değer döndürür ve bir SELECT gibi sorgunun içinde kullanılabilir; procedure ise tek başına çağrılır ve birçok veritabanında transaction'ları yönetebilir. Trigger, bir INSERT gibi bir olaya karşılık otomatik olarak çalışır; procedure ise yalnızca bir şey onu çağırdığında çalışır. Başlıca ödünleşim, veritabanındaki mantığın sürümlenmesinin, test edilmesinin ve başka bir veritabanına taşınmasının uygulama kodundaki mantığa göre daha zor olmasıdır.

Önemli noktalar

  • Stored procedure, veritabanında saklanan, adlandırılmış ve yeniden kullanılabilir SQL kodudur.
  • Parametre alabilir ve tek bir ağ gidiş-dönüşünde birçok ifade çalıştırabilir.
  • Her veritabanı kendi prosedürel dilini kullanır; bu yüzden procedure'ler nadiren taşınabilirdir.
  • Procedure'ler, kullanıcıların tablolara doğrudan dokunmadan çalıştırmasına izin vererek erişimi sınırlayabilir.
  • Trigger'dan farklı olarak procedure yalnızca açıkça çağrıldığında çalışır.

Örnek

PostgreSQL'de stored procedure oluşturmak ve çağırmaksql
-- Define a procedure that moves money between two accounts
CREATE PROCEDURE transfer(from_id INT, to_id INT, amount NUMERIC)
LANGUAGE plpgsql
AS $$
BEGIN
  UPDATE accounts SET balance = balance - amount WHERE id = from_id;
  UPDATE accounts SET balance = balance + amount WHERE id = to_id;
END;
$$;

-- Run it with one call
CALL transfer(1, 2, 100);

Sık sorulan sorular

Stored procedure ile fonksiyon arasındaki fark nedir?

Fonksiyon bir değer döndürür ve bir SQL sorgusunun içinde kullanılabilir; stored procedure ise CALL gibi bir ifadeyle tek başına çağrılır. Birçok veritabanında procedure'ler ayrıca transaction'ı onaylayabilir ya da geri alabilir; fonksiyonlar genellikle bunu yapamaz.

Stored procedure'ler hâlâ kullanılıyor mu?

Evet, özellikle performansın ve merkezi kuralların önemli olduğu veri ağırlıklı ve kurumsal sistemlerde. Birçok yeni uygulama ise iş mantığının çoğunu uygulama kodunda tutar; çünkü test etmek, sürümlemek ve dağıtmak daha kolaydır.

Stored procedure'ler SQL injection'ı önler mi?

Kullanıcı girdisi parametre olarak geçirildiğinde yardımcı olurlar; çünkü girdi SQL kodu olarak değil değer olarak ele alınır. Ancak dizeleri birleştirerek dinamik SQL oluşturan bir procedure yine de savunmasız olabilir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar