Stored Procedure Nedir ?
Stored Procedure'ler database server'da saklanan SQL ifadeleri gibi düşünelebilir. Bir programlama dilindeki fonksiyonlar gibi parametre alabilirler. Bu parametrelere göre bir sorgu çalıştırıp cevap gönderilirebilir.
Stored Procedure'ler database server'ında saklanmasından dolayı daha hızlı çalışırlar. Bir stored procedure ilk çalıştırıldığı zaman derlenir. Bir daha çalıştırılınca derlenmeden çalışırlar. Halbuki bir program içinden SQL ifadeleri ile server'a bağlanırsanız her bağlanışsa SQL ifadesi derlenir. Bu da zaman kaybı demektir.
Sotered procedure'un diğer bir özelliği ise programlama deyimleri içermesidir. if, next, set vs.. programlama dillerindekine benzer özellikler sunar. Gelen parametrelere göre sorgu yapılıp sonucun dönmesi sağlanabilir.
Bir databse projesi gerçekleştiriyorsanız kesinlikle stored procedure kullanmalısınız. Hatta bazı progamcılar programlarının hiç bir yerinde SQL ifadesi kullanmazlar. Her zaman stored procedure'ler ile çalışırlar.
SQL Server'da Stored Procedure
SQL Server ile Stored Procedure hazırlanabilir. Bir database yaratıldığı zaman Stored Procedures klasörüde yaratılır. O klasörün üstünde sağ tıklanarak yeni bir stored procedure yaratılabilir.
Bir sql ifadesi stored procedure olarak saklanabilir. Örneğin "select * from Kisiler" bir stored procedure olarak saklanabilir. Ancak daha çok parametre alan Stored Procedure'ler kullanılır. Örneğin aşağıda basit bir stored procedure bulunmakta
CREATE PROCEDURE TEST_PRO
@yas int
AS
SELECT * FROM KISI where YAS > @yas ORDER BY YAS
Yukarıda TEST_PRO adında bir procedure yarattık. Parametre olarak bir int ID alıyor. Stored Procedure'lerde alınan paramtrelerin tipi verilmek zorundadır. Birden fazla parametre alınabilir. Parametreler arasına virgül koyulur. AS ile çalılştırılacak SQL ifadesi yazılır. SQL ifadesinde KISI tablosounda verilen yaştan daha büyük yaştaki kişileri alıyoruz. Paramtreler @ işareti ile kullanılırlar.
Programlama deyimleride kullanılabilir. Örneğin if,else kullanılabilir.
CREATE PROCEDURE TEST_PRO
@yas int
AS
if (yas > 19)
SELECT * FROM KISI where YAS > @yas ORDER BY YAS
else
SELECT * FROM KISI where YAS > @yas and ERISKIN=1 ORDER BY YAS