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.
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
-- 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
- SQLVeritabanları, s. 29SQL, ilişkisel veritabanlarıyla çalışmanın standart dilidir; tablo oluşturmak ve içindeki veriyi eklemek, sorgulamak, güncellemek ve silmek için kullanılır.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- TransactionVeritabanları, s. 36Transaction, tek bir bütün olarak başarılı ya da başarısız olan veritabanı işlemleri grubudur; böylece veri asla yarım kalmış, tutarsız bir durumda bırakılmaz.
- SQL InjectionGüvenlik, s. 39SQL injection, kullanıcı girdisinin veritabanı sorgusunun parçası sayıldığı ve saldırganın erişmemesi gereken verileri okuyup değiştirebildiği saldırıdır.
- ORMVeritabanları, s. 24ORM, veritabanı tablolarını programlama dilinizdeki nesnelere eşleyen ve ham SQL yerine kodla veri okuyup yazmanızı sağlayan bir kütüphanedir.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin