SQL Stored Procedure Oluşturma ve Çalıştırma
MS-SQL meraklısı veritabanı ve yazılım uzmanlarına yeniden selamlar olsun :)
Bir önceki T-SQL makalemizde SQL View kavramını öğrenmiş ve birkaç küçük örnek uygulama gerçekleştirmiştik,bu makalemizde ise View kavramına benzeyen ama daha çok işlevsel olan Stored Procedure konusunu öğreneceğiz.
Stored Procedure'ü Türkçe'ye çevirmek istediğimiz "depolanmış süreç-işlev) gibi bir anlama gelmektedir ve adından da anlaşılabileceği gibi daha önceden tanımlanmış ve bir iş yapan hatta değer ve tablo döndürebilen fonksiyondur diyebiliriz.
Fonksiyon demişken eğer yazılım bilginiz varsa Stored Procedure kavramını C# ve Java programlama dilindeki metotlara,VB.Net ve Javascript dilindeki fonksiyonlar gibi birçok kavramla hemen hemen aynı olduğunu söylebiliriz :)
Konuya biraz daha teorik gittikten sonra birkaç örnek yapacağız ama önce Stored Procedure nedir ve ne işe
yarar görelim:
Stored Procedure;
1-Veritabanına tanımlanmış metotlardır.
2-Temel CRUD (insert,update,delete) işlevleri yanı sıra select sorgusunu çalıştırarak tablo verilerini döndürebilirler.
3-Parametre alarak dışarıdan verilecek veriye göre hareket edebilirler.
4-View kavramına göre daha geniş kapsamlıdır ve View'in parametreli haline benzetebiliriz. (Parametreli View)
5-Stored Procedure bir SQL nesnesi olduğu için veritabanı yedekleme esnasında yedeği alınabilir.
6-Stored Procedure içerisinde yine başka bir Stored Procedure çalıştırılabilir,hatta içeriğinde view kullanılabilir.
7-Uzun uzun sorgular yazmak yerine çok basit kısa kelimelerle işlemler yapmamıza olanak sağlarlar.
8-Stored Procedure veritabanı işlevi olduğu için yazılım tarafından çalıştırıldığında daha iyi performans sağlarlar.
9-Bir Stored Procedure yalnızca bir veritabanına ait olabilirler,farklı bir veritabanındaki procedure'ü bir başka veritabanı üzerinden çalıştıramayız.
10-Aynı isimde farklı parametre sayısı olsa dahi birden çok Stored Procedure tanımlanamaz.
11-Stored Procedure tablolardan bağımsızdır ve dolayısıyla DDL sorguları (create,alter,drop) çalıştırabilirler.
12-Stored Procedure'e parametre tanımlanırken dikkatli olunması gerekmektedir.Nasıl ki varchar ile bit farklı data tipleriyse yanlış tanımlanacak parametre procedure'ün çalışmasını engelleyecektir.
Stored Procedure ile ilgili özellik ve kurallardan şu anlık aklıma gelenler bunlardır ve özellikle büyük çaplı projelerde sıkça kullanıldığı için her yazılımcı ve veritabanı uzmanının kesinlikle bilmesi gereken bir konudur.
Parametresiz bir Stored Procedure'ü çalıştırmak için:
Execute
ya da
Parametreli bir Stored Procedure'ü çalıştırmak için:
Execute parametre1,parametre2,parametreN..
Bir Stored Procedure oluşturmak için:
Create Proc
as
begin
//Çalıştırılacak SQL Kodları
end
ya da
Create Procedure
as
begin
//Çalıştırılacak SQL Kodları
end
Bir Stored Procedure'ü değiştirmek için:
Alter Proc
as
begin
//Yeni SQL Kodları
end
Bir Stored Procedure'ü veritabanından kaldırmak için:
Drop Proc
SQL kod satırlarını kullanmamız yeterlidir.Gördüğünüz gibi "proc" ile "procedure" arasında hiçbir fark yoktur çünkü T-SQL veritabanı yönetim dilinde "procedure" sözcüğünün kısaltması "proc" olarak geçmektedir.
Şimdi gelelim Stored Procedure örneklerimize..Daha önceki veritabanı makalelerimizde olduğu gibi örnek veritabanımız olan BakkalDB'yi SQL Server Management Studio ile açalım.Hatırlamak adına veritabanımızın diyagramdaki yapısı şu şekildeydi:
Stored Procedure ile ilgili ilk öğreneceğimiz konu bir değer döndürebildiği olsun,öncelikle create sorgusu ile toplam
müşteri sayısını getirelim:
Gördüğünüz gibi Stored Procedure içerisinde daha önce öğrendiğimiz basit SQL sorguları kullanıyoruz,Procedure'ümüzü
klavyemizden F5 tuşuna basarak oluşturduktan sonra şimdi çalıştırıyoruz:
Stored Procedure'ün bir diğer güzelliği ise sık sık aynı yazdığımız SQL sorgularını bir defa yazıp defalarca yeniden
yazmaya gerek kalmadan tekrar tekrar kullanabilmemizi sağlamaktadır.Bu sayede zaman tasarrufu elde edebiliyoruz.
Yeni bir Stored Procedure daha oluşturalım ve bu procedure'ümüz dışarıdan vereceğimiz ID değerine göre bir müşterimizin alışveriş geçmişini listelesini,yani geriye tablo döndürsün:
Parametreli Stored Procedure ile ilgili bilmemiz gereken en önemli nokta makalemizin başında da belirttiğim gibi doğru
parametre veri tipini procedure içinde doğru kullanabilmeliyiz.Öyle ki yukarıdaki örnekte nasıl ki ID değerinin tipini int
olarak belirttiysek SQL sorgusu içindeki yine int tipinde olan MusteriID değerine doğru bir şekilde denkleştirmemiz gerekir.
Şimdi yazdığımız parametreli stored procedure'ümüzü çalıştıralım:
Gayet güzel bir kullanım oldu diye düşünüyorum ama bu kadar basit SQL sorguları yanı sıra içerisinde join,order by gibi
yardımcı sorgular dahi kullanabilirsiniz.
Stored Procedure ile ilgili bir de insert sorgusu yazalım, örneğin yeni bir müşteri kaydı oluşturan Stored Procedure oluşturalım:
Dikkat ederseniz parametrelerin veri tipleri insert edeceğimiz tablodaki kolonların veri tipleriyle bire bir aynı yazılmış
durumdadır,bunun aksi olursa procedure ya yanlış çalışır ya da hiç çalışmayabilir.
Insert sorgusu oluşturan sorgumuzu çalıştıralım:
Management Studio, bize tıpkı normal insert sorgusu yazmış gibi etkilenen satır sayısını sonuç olarak bildiriyor.
Diyoruz ki yeni müşteri kaydını yapan sorgumuz TCNo kolonuna veri girmesin ama diğer bilgileri kaydetsin..Hay hay :)
DDL sorgulardan alter sorgusu ile Stored Procedure'ün yapısını değiştirerek bir sonraki kullanımda TCNo bilgisini istemesini önlüyoruz ama derseniz bu procedure'e ihtiyacımız yok, o halde procedure'ü veritabanından drop sorgusu ile kaldırıyoruz:
Stored Procedure'lerle ilgili olarak öğrenmemiz gerekenler şimdilik buraya kadar,bir sonraki makalemizde SQL Declare (bildirim) deyimini öğreneceğiz ve Stored Procedure'lerle çalışmaya devam edeceğiz.
O zamana kadar hoşçakalın esen kalın :)
Bir önceki T-SQL makalemizde SQL View kavramını öğrenmiş ve birkaç küçük örnek uygulama gerçekleştirmiştik,bu makalemizde ise View kavramına benzeyen ama daha çok işlevsel olan Stored Procedure konusunu öğreneceğiz.
Stored Procedure'ü Türkçe'ye çevirmek istediğimiz "depolanmış süreç-işlev) gibi bir anlama gelmektedir ve adından da anlaşılabileceği gibi daha önceden tanımlanmış ve bir iş yapan hatta değer ve tablo döndürebilen fonksiyondur diyebiliriz.
Fonksiyon demişken eğer yazılım bilginiz varsa Stored Procedure kavramını C# ve Java programlama dilindeki metotlara,VB.Net ve Javascript dilindeki fonksiyonlar gibi birçok kavramla hemen hemen aynı olduğunu söylebiliriz :)
Konuya biraz daha teorik gittikten sonra birkaç örnek yapacağız ama önce Stored Procedure nedir ve ne işe
yarar görelim:
Stored Procedure;
1-Veritabanına tanımlanmış metotlardır.
2-Temel CRUD (insert,update,delete) işlevleri yanı sıra select sorgusunu çalıştırarak tablo verilerini döndürebilirler.
3-Parametre alarak dışarıdan verilecek veriye göre hareket edebilirler.
4-View kavramına göre daha geniş kapsamlıdır ve View'in parametreli haline benzetebiliriz. (Parametreli View)
5-Stored Procedure bir SQL nesnesi olduğu için veritabanı yedekleme esnasında yedeği alınabilir.
6-Stored Procedure içerisinde yine başka bir Stored Procedure çalıştırılabilir,hatta içeriğinde view kullanılabilir.
7-Uzun uzun sorgular yazmak yerine çok basit kısa kelimelerle işlemler yapmamıza olanak sağlarlar.
8-Stored Procedure veritabanı işlevi olduğu için yazılım tarafından çalıştırıldığında daha iyi performans sağlarlar.
9-Bir Stored Procedure yalnızca bir veritabanına ait olabilirler,farklı bir veritabanındaki procedure'ü bir başka veritabanı üzerinden çalıştıramayız.
10-Aynı isimde farklı parametre sayısı olsa dahi birden çok Stored Procedure tanımlanamaz.
11-Stored Procedure tablolardan bağımsızdır ve dolayısıyla DDL sorguları (create,alter,drop) çalıştırabilirler.
12-Stored Procedure'e parametre tanımlanırken dikkatli olunması gerekmektedir.Nasıl ki varchar ile bit farklı data tipleriyse yanlış tanımlanacak parametre procedure'ün çalışmasını engelleyecektir.
Stored Procedure ile ilgili özellik ve kurallardan şu anlık aklıma gelenler bunlardır ve özellikle büyük çaplı projelerde sıkça kullanıldığı için her yazılımcı ve veritabanı uzmanının kesinlikle bilmesi gereken bir konudur.
Parametresiz bir Stored Procedure'ü çalıştırmak için:
Execute
ya da
Parametreli bir Stored Procedure'ü çalıştırmak için:
Execute
Bir Stored Procedure oluşturmak için:
Create Proc
as
begin
//Çalıştırılacak SQL Kodları
end
ya da
Create Procedure
as
begin
//Çalıştırılacak SQL Kodları
end
Bir Stored Procedure'ü değiştirmek için:
Alter Proc
as
begin
//Yeni SQL Kodları
end
Bir Stored Procedure'ü veritabanından kaldırmak için:
Drop Proc
SQL kod satırlarını kullanmamız yeterlidir.Gördüğünüz gibi "proc" ile "procedure" arasında hiçbir fark yoktur çünkü T-SQL veritabanı yönetim dilinde "procedure" sözcüğünün kısaltması "proc" olarak geçmektedir.
Şimdi gelelim Stored Procedure örneklerimize..Daha önceki veritabanı makalelerimizde olduğu gibi örnek veritabanımız olan BakkalDB'yi SQL Server Management Studio ile açalım.Hatırlamak adına veritabanımızın diyagramdaki yapısı şu şekildeydi:
Stored Procedure ile ilgili ilk öğreneceğimiz konu bir değer döndürebildiği olsun,öncelikle create sorgusu ile toplam
müşteri sayısını getirelim:
Gördüğünüz gibi Stored Procedure içerisinde daha önce öğrendiğimiz basit SQL sorguları kullanıyoruz,Procedure'ümüzü
klavyemizden F5 tuşuna basarak oluşturduktan sonra şimdi çalıştırıyoruz:
Stored Procedure'ün bir diğer güzelliği ise sık sık aynı yazdığımız SQL sorgularını bir defa yazıp defalarca yeniden
yazmaya gerek kalmadan tekrar tekrar kullanabilmemizi sağlamaktadır.Bu sayede zaman tasarrufu elde edebiliyoruz.
Yeni bir Stored Procedure daha oluşturalım ve bu procedure'ümüz dışarıdan vereceğimiz ID değerine göre bir müşterimizin alışveriş geçmişini listelesini,yani geriye tablo döndürsün:
Parametreli Stored Procedure ile ilgili bilmemiz gereken en önemli nokta makalemizin başında da belirttiğim gibi doğru
parametre veri tipini procedure içinde doğru kullanabilmeliyiz.Öyle ki yukarıdaki örnekte nasıl ki ID değerinin tipini int
olarak belirttiysek SQL sorgusu içindeki yine int tipinde olan MusteriID değerine doğru bir şekilde denkleştirmemiz gerekir.
Şimdi yazdığımız parametreli stored procedure'ümüzü çalıştıralım:
Gayet güzel bir kullanım oldu diye düşünüyorum ama bu kadar basit SQL sorguları yanı sıra içerisinde join,order by gibi
yardımcı sorgular dahi kullanabilirsiniz.
Stored Procedure ile ilgili bir de insert sorgusu yazalım, örneğin yeni bir müşteri kaydı oluşturan Stored Procedure oluşturalım:
Dikkat ederseniz parametrelerin veri tipleri insert edeceğimiz tablodaki kolonların veri tipleriyle bire bir aynı yazılmış
durumdadır,bunun aksi olursa procedure ya yanlış çalışır ya da hiç çalışmayabilir.
Insert sorgusu oluşturan sorgumuzu çalıştıralım:
Management Studio, bize tıpkı normal insert sorgusu yazmış gibi etkilenen satır sayısını sonuç olarak bildiriyor.
Diyoruz ki yeni müşteri kaydını yapan sorgumuz TCNo kolonuna veri girmesin ama diğer bilgileri kaydetsin..Hay hay :)
DDL sorgulardan alter sorgusu ile Stored Procedure'ün yapısını değiştirerek bir sonraki kullanımda TCNo bilgisini istemesini önlüyoruz ama derseniz bu procedure'e ihtiyacımız yok, o halde procedure'ü veritabanından drop sorgusu ile kaldırıyoruz:
Stored Procedure'lerle ilgili olarak öğrenmemiz gerekenler şimdilik buraya kadar,bir sonraki makalemizde SQL Declare (bildirim) deyimini öğreneceğiz ve Stored Procedure'lerle çalışmaya devam edeceğiz.
O zamana kadar hoşçakalın esen kalın :)
create proc dediğimiz zaman create proc procedureadi şeklinde anlatsanız daha anlaşılır olur anlatım için tşkler