Stored Procedure Nedir? Temel Düzeyde SP Tanımlama ve Uygulama

Bu yazı Stored Procedure’ü anlamak ve uygulamak isteyen kişiler için temel bir kaynak niteliğindedir ve aşağıdaki sorulara temel düzeyde cevap verecektir. Stored Procedure nedir?

Ne için kullanılır?

Stored Procedureün avantajları nelerdir?

Stored Procedure kullanımında dikkat edilmesi gereken temel etmenler nelerdir?

Stored Procedure nasıl oluşturulur?

Stored Procedure ile veri listeleme nasıl gerçekleştirilir?

Stored Procedure ile belirli bir alanın değerine göre listeleme nasıl gerçekleştirilir?

Stored Prosedurü sayfamızda nasıl çalıştırabiliriz?

Stored Procedureü hangi uygulamalarda kullanmalıyız?

 

Giriş 

Not: Bu yazımız her ne kadar veritabanı olarak MS SQL Server ve yazılım dili olarak da ASP temel alınarak yazılmış olsa da, olayın temel mantığını anlamak açısından MS SQL Server ve ASP kullanmayan ve/veya bilmeyenler için de SP’yi anlamak açısından yararlı olacaktır.

Konusunda uzman tüm veritabanları Stored Procedureü desteklemektedir. (MSSQL, Oracle, MySql…)

 

Stored Procedure:

MS SQL ile bir veritabanı uygulamalı sistem üzerinde çalıştığımızda kodlarımızın yüklenmesi ve çalıştırılmasında iki farklı yöntem vardır;

Kodlarımızın lokalde çalıştırılmasından sonra SQL Server’a komutlar gönderilir ve sql server komutlara göre sonuçlar işlenir.

İkincisi ise uygulamayı Stored Prosedur olarak SQL Server içinde oluştururuz ve uygulama SQL server içinde çalışıp ona göre sonuç verir.

Bu tanımdan anlaşılacağı üzere Stored Prosedur, SQL Sever içinde daha önceden oluşturulmuş ve program esnasında uygulama sayfasından gelen komutlara göre, SQL Server içinde çalışan ve sonuçları işleyen bir uygulamadır.

 

SP komut dizesinde if then else gibi program komutları kullanabilir, dışarıdan gelen bir veriye göre işlem yapabiliriz.

 

Stored Procedurelerin Avantajları

 

*Modular programlamaya olanak verir

Stored Procedureü bir kez oluşturduktan sonra programımızda birçok kez çağırabiliriz.

Stored Procedureler, daha çok veritabanı uygulamalı programlamada uzmanlaşmış kişiler tarafından kullanılır ve SP’lerde program kaynağından bağımsız olarak değişiklik yapılabilir.

 

* Hızlı uygulamaya olanak verir

Eğer uygulama çok miktarda sql kodun işlenmesini gerektiriyorsa veya tekrar edilen bir uygulamaysa SP’ler sql kod kümesinden çok daha hızlı çalışacaktır.

SP’lerdeki en önemli özelliklerden biri de bir kez çalıştırılmasıdır, oysa sql kod kümesiyle yapılan bir işlem clientın her istendiğinde yeniden sqle gönderilmekte ve çalıştırılmaktadır. Bu da hızı önemli ölçüde etkilemektedir. Zaten veritabanı içinde oluşturup çalıştırılması bile başlı başına hıza etken bir durumdur.

 

*Network trafiğini düşürür

Çok uzun bir Sql kod kümesiyle yapılan işlemleri tek bir SP ile yaptığımızı düşünürsek, yüzlerce satırlık bir kod yığınına göre tek bir SP network trafiğinde çok daha az yer tutacaktır.

 

 

 

 

 

Stored Procedure Oluşturma

 

Stored Procedure oluşturmak için SQL Server Enterprise Managerda bulunan veritabanımızı seçiyoruz. Veritabanı isminin yanında bulunan + işaretini tıklayarak Stored Procedurs kısmına geliyoruz. Karşımızda sistem tarafından kullanılan sp_ ile başlayan SP’leri görebileceğiz.

Burada boş bir alanda sağ tıklayarak “new stored procedure” kısmına geliyoruz ve karşımıza gelen pencereye SP’mizi yazıyoruz.

 

CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS

 

Burada OWNER veritabanı için belirlemiş olduğumuz kullanıcı adıdır, Procedure Name ise adı üzerinde SP’mizin adıdır.

Bu noktada elimizdeki veriler şöyle olsun,

Veritabanı: db

Kullanıcı adı: kullanıcı

Şifre: sifre

Tablo adı: tablo

 

Tablo isimli veritabanımızda id, isim, il alanlarımızda 4 tane kayıt girilmiştir.

SP ile tüm kayıtları listelemek için şöyle bir kod yazmamız gerekecektir.

 

CREATE PROCEDURE kullanici.sp_genel

AS

SELECT * FROM TABLO

GO

 

Komut dizemizi ekledikten sonra OK diyoruz ve oluşturma işlemini tamamlıyoruz (Kullanıcı adı ve şifremizi db isimli veritabanı için önceden oluşturmuştuk.) Eğer “kullanıcı” isimli kullanıcı adı tanımlanmamış olsaydı SP oluşturulamayacak ve aşağıdaki hatayı verecekti.

Error 2760: Specified owner name ‘deneme’ either does not exist or you do not have permission to use it.

 

 

 

 

Query Analyzer ile SP oluşuturma

Yukarıda Enterprise Manager ile SP oluşturmuştuk, aynı işlemi Query Analyzer ile de yapabiliriz.

Query Analyzer’a giriş yaptıktan sonra gelen Query-OEM.db.kullanici penceresine kodumuzu yazıoruz ve Execute Query tuşuna basıyoruz. Burada dikkat ederseniz SP adından önce kullanıcı adını yazmıyoruz.

 

CREATE PROCEDURE sp_genel

AS

SELECT * FROM TABLO

GO

 

 

 

 

 

Query Analyzer’da SP Çalıştırma

 

SPmizi oluşturduktan sonra, sayfamızdan çağırmadan önce çalışmasını kontrol etmek için ve gelen verileri tablo şeklinde görmek için SQL Query Analyzer i açıyoruz.

 

 

 

Kullanıcı adımızı şifremizi yazarak giriş yapıyoruz.

Yukarıda bulunan VT listesinden db isimli veritabanımızı seçiyoruz.

Boş alana

Exec sp_genel

 

Yazıyoruz ve F5’e basıyoruz. (Bu işlemi VT listesi yanında bulunan yeşil oku (Execute Query) tıklayarak da yapabiliriz)

 

Ve SP ile yazdığımız komutun çıktısını görebiliyoruz.

 

 

 

Bir Başka yol:

Query Analyzer da SP’yi çalıştırmak için

Kullanıcıadi.SP_adi

şeklinde bir ifade de kullanılabilir.

 

Örneğimiz için;

Kullanici.spgenel

Yazıp F5’e basınca SP çalışcaktır.

 

 

 

SP’yi ASP Sayfamızda Çalıştırma

 

Şimdi sıra SP’yi sayfamıza eklemekte…

Kodlardan da rahatlıkla anlaşılacağı üzere ilk önce Veritabanı bağlantımızı yapıyoruz.

Recordset oluştururken execute(“Exec SP_adi”) kalıbıyla SP’yi çalıştırmış oluyoruz.

 

Default.asp

 

<%

Set baglanti=Server.CreateObject("Adodb.Connection")

baglanti.Open "driver={SQL Server};server=localhost;uid=kullanici;pwd=sifre;d atabase=db"

 

Set rs = baglanti.Execute("Exec sp_genel")

Do Until rs.Eof

Response.Write rs("isim") & "<br>"

rs.Movenext

Loop

%>

 

Söz konusu default.asp sayfamızın çıktısı şöyle olacaktır:

Ramazan

Erhan

Hakan

Aydın

 

 

 

 

 

Stored Procedurele ID’ye Göre Listeleme

 

Şimdi gelelim id ye göre listeleme yapmaya yarayan SP’ye.

SQL Query Analyzer da sp_id isimli SP mizin kodlarını şöyle belirtelim.

Sp_id isimli SP’mizde dışarıdan gelecek olan id (int) alanı için kodlarımızı yazalım.

İlk satırımızda

Create Procedure sp_id

İfadesini yazıyoruz ve AS komutundan önce @ işaretiyle değişkenimizi tanımlıyoruz.

@deger int

Select * from tablo where id=@deger ifadesiyle istenilen id numarasına sahip satırı elde etmiş oluyoruz.

 

CREATE PROCEDURE sp_id

@deger int

AS

select * from tablo where id=@deger

 

GO

 

Eğer bir hata yoksa başarıyla oluşturuldu mesajını alacağız, kontrol etmek açısından, SP’yi sayfamıza eklemeden çalıştırıp sonucunu görelim.

 

Query Analyzerda

exec sp_id @deger=1

 

Yazıp çalıştırdığımızda ekran çıktısı aşağıdaki gibi olacaktır.

 

 

 

 

Şimdi gelelim sayfamızı çalıştıracak koda:

Defaultid.asp

 

<%

Set baglanti=Server.CreateObject("Adodb.Connection")

baglanti.Open "driver={SQL Server};server=localhost;uid=kullanici;pwd=sifre;d atabase=db"

 

 

ID=request.QueryString("ID")

Set rs = baglanti.Execute("Exec sp_id @deger =" & ID)

 

 

Do while not rs.Eof

Response.Write rs("isim") & "<br>"

rs.Movenext

Loop

%>

 

 

Önemli Not: Gelen ID değerlerini kontrol edilmesi uygulamasına sadeliği bozmaması açısından girilmemiştir. Bilmeyenler için;

http://localhost/stored/defaultid.asp?id=3 ile listeleme yapıyorduk,

Ancak adres satırına

http://localhost/stored/defaultid.as...20from%20tablo yazılırsa, ortada tabloya ait hiçbir veri kalmayacaktır.

Bu konuda bilgisi olmayanlar “Sql injection” ifadesiyle tarama yapabilirler.

 

 

Sonuç:

Son soru hariç olmak üzere umarım yazımızın girişinde belirttiğim sorulara cevap olabilmiştir.

Gelelim son sorunun cevabına; Stored Procedureü hangi uygulamalarda kullanmalıyız?

Günümüzde bir çok uygulamada Stored Procedure kullanılmakta ve hatta bazı uygulamaların tamamı SP destekli yapılmaktadır. Genellikle çok büyük uygulamalarda SP kullanılması karışıklığa neden olacağı gerekçesiyle tavsiye edilmemektedir. Şahsen proje ne kadar büyük de olsa uygun isimlerle SP’lerin kullanılmasında fayda olacağını düşünmekteyim.

Uygulamanın tamamında olmasa da bir çok yerinde SP kullanmak hız, performans ve güvenlik açısından fayda sağlayacaktır. Buna en iyi kararı siz vereceksiniz.

Başka bir deyişle bu sorunun cevabını kendiniz vermelisiniz.

CTRL Bizde

Kendi halinde bir kaç kişiyiz,. Karşılaştığımız sorunları çözmek için bazen "çok zaman" harcadığımızı fark edip

devamı

Yeni Eklenenler