Ne arayalım?

ARAMIZA KATILIN

BİZE ULAŞIN

Adres:

E-posta:

host/bin/bilisimlife.dll

iletisim@bilisimlife.net

Stored Procedure Kullanımı 88748874 okunma

05.11.2018

Veritabanı

Rserit

SQL Server bileşeni olan Stored Procedure, bizler çok yönden kolaylıklar sağlıyor. Stored Procedure, saklı yordam manasına ya da saklı işlem grubu anlamına gelir. Procedure’ler Database Server içerisinde saklanırlar. Bununla birlikte birçok parametre kullanabiliriz. Her türlü işimizde kullanabiliriz. Bununla ilgili gerekli açıklama sözlük içerisinde yapıldığından kullanımına geçiyorum.

Mantığı şudur, sürekli olarak uzun bir kod yazdığınızı düşünün. Her gün veya her hafta ya da işiniz her düştüğünde o kodu yazmaktansa bir isimle o sorguyu çağırmak sizi bir yükten kurtarır. Işte burada procedure oluşturulur ve içerisine o sorgu yazılır. Ardından procedure ismi yazılarak gerekli işlem görülür.

Bu makaleyi daha iyi anlamanız için birçok örnek yapacağım.

Stored Procedure’ler, select, update, insert, delete gibi işlemlerde kullanılır.

Not: Procedure oluşturabilmeniz için System Administrator  (sysadmin), Database Owner (db_owner), Data Definiton Language Administrator (db_ddladmin) rollerine ya da CREATE PROCEDURE  izni verilmiş bir role sahip olmalısınız, aksi halde oluşturamazsınız.

Kullanımı şu şekildedir:

create procedure [Procedure_ismi] (@parametre-ismi verituru)

as

create procedure diyerek prosedür oluşturulur, ardından bir isim verilir. Onun ardından eğer bir parametre girilecekse o yazılır ve parametre veritürü belirtilir.

Parametre Kavramı

Parametre neden girilir? Eğer biz dışarıdan bir değer gireceksek, o parametreyi kullanırız. Örnek verelim, bir insert işlemi yaptıracaksınız. Ad ve Soyad sütunlarını ekleyeceksiniz. O halde insert edeceğiniz iki sütunsa, iki parametreniz olacak. Yine bir örnek verelim. Benim girmiş olduğum isimdeki kişileri listelemesini istiyorum diyelim. Bakın ne dedim? “Benim girmiş olduğum isimdeki kişileri” dedim. Yani burada bir tane parametre var ki ben ona isim gireceğim. Örnek ile bunları pekiştirelim.

Parametreler başına @ işareti koyularak oluşturulur. Ardından parametre ismi girilir (istediğiniz gibi girin), ardından parametreyle alakalı veri türünü girin (veri türü fiziksel tabloda olan veri türü olmalıdır), ardından ise girilecekse karakter değeri girilir.

Birden çok parametre girilecekse virgül koyularak bir satır alta inilir. Virgülü sakın untumayın.

Örneğin:

(
@spAdi nvarchar (50),
@spSoyadi nvarchar (50),
@spMaas decimal (18,2)

)

Not: Parametre her zaman kullanılması zorunlu değildir. Aşağıdaki örnek bunun göstergesidir.

Şimdi bir örnek yaparak anlamaya çalışalım. Üyeler isimli tablomu listelemesini istiyorum diyelim.

 

create procedure uyeleriListele

as

select * from Uyeler

 

Execute dediğimizde procedure oluşturulacaktır.

Yukarıda bir parametre girmedim çünkü dışarıdan bir değer girmeme gerek yok, yalnızca listeleme işlemi istemişim.

Stored Procedure’lerin Çalıştırılması

Prosedürler exec ya da execute yazılarak çalıştırılırlar. Az önce oluşturduğumuz stored procedure’u çağırmak için iki yöntem kullanabiliriz.

1. exec uyeleriListele
2. uyeleriListe  -- bu şekilde yazdığımızda da kabul eder.

Yukarıdaki prosedürü çalıştıralım.

Oluşturulan Stored Procedure’lere Erişmek

Oluşturduğumuz prosedüre erişmek için veritabanımızın içine girip, Programmability içerisinde Stored Procedures içerisine bakmak olacaktır. Aşağıdaki gibi.

Stored Procedure Üzerinde Parametreli Örnekler

Örnek: Öyle bir prosedürüm olsun ki, benim girdiğim maaşı alan kişileri listelesin..

Çözüm: “Benim girdiğim maaşı” diyorsam demek ki bir adet maaş gireceğim, yani bir adet parametrem olacak.

Şöyle ki:

 

create proc maasGetir

(

@spMaas decimal (18,2)

)

as

Select * from Uyeler Where Maas = @spMaas


Prosedürümüzü çalıştıralım ve bir maaş girelim, bize o maaşta olan kişinin bilgilerini listelesin.

Görüldüğü gibi listeledi.

Örnek: Benim girmiş olduğum maaş aralığındaki kişileri listelesin.

Çözüm: “Maaş aralığı” diyorsam iki adet maaş sayısı gireceğim, yani iki adet parametrem olacak.

Şöyle ki:

 

create proc maasAraligi

(

@spMaas1 decimal (18,2),

@spMaas2 decimal (18,2)

)

as

Select * from Uyeler Where Maas Between @spMaas1 and @spMaas2


Prosedürümüzü çalıştıralım.

 

Görüldüğü gibi çalıştı.

Örnek: Kullanıcı adında girmiş olduğum harf varsa o kişilerin bilgilerini listelesin.

Çözüm: Burada like kullanımı biraz değişik. % işaretleri tek tırnak içerisine alınıp + ile parametreye atanıyor. Şimdi gösterelim.

Şöyle ki:

create proc kadiAra

(

@spHarf nvarchar(1)

)

as

Select * from Uyeler Where KullaniciAdi Like '%' + @spHarf + '%'

 

Çalıştıralım.

Görüldüğü üzere A harfindeki kullanıcıyı getirdi.

Örnek: Uyeler tablomdaki CocukSay sütunundan yola çıkarak, girmiş olduğum isimdeki kişinin çocuk sayısı 3 veya fazlaysa “Çocuk sayısı yeterli”, 3’den azsa “Çocuk sayısı yetersiz” çıktısını verecek sorguyu yazın.

Çözüm: Burada if exists mantığıyla gideceğiz.

Şöyle ki:


create proc cocukBak

(

@spIsim nvarchar(50)

)

as

if exists (Select * from Uyeler Where AdSoyad = @spIsim and CocukSay > = 3)

print ('Çocuk sayısı yeterli')

else

print ('Çocuk sayısı yetersiz')

 

 Şimdi çalıştıralım ve çıktısına bakalım.

 

 Görüldüğü üzere ismimi yazdım ve çocuk sayısının yetersiz olduğun söyledi.

 Stored Procedure’lerde declare, if exists, while gibi her türlü fonksiyonları, metotları kullanabilirsiniz.

Varolan Procedure’u Güncellemek ya da Silmek

Bu işlemi komutla yaparsak şu şekilde olacaktır:

Alter Proc procedureIsmi  dememiz yeterlidir. Ardından parametre sayısını arttırabilir ya da azaltabiliriz, ya da sorgumuzu güncelleyebiliriz.

Bunun yanında Programmability içerisinde Stored Procedures içerisine girdiğimizde burada oluşturduğumuz prosedüre sağ tuş yapıp modifiy dediğimizde de aynı işlem olacaktır.

 Eğer bir prosedürü silmek istiyorsak bu komutla bu şekildedir:

 Drop Proc procedureIsmi  yapmamız yeterlidir.

Böyle istemiyorsak, prosedüre sağ tuş yapın ve delete deyin, bu da aynı işlevdir.

Stored Procedure’ler aslında geniş kapsamlı bir konu. Bu makalemde sizlere kullanımını gösterdim, diğer makalelerde farklı yerlerine giriş yapacağız.

Konuyla ilgili bir probleminiz varsa BilişimLife Forum alanından Veritabanı kategorisine başlık açmanız yeterlidir.

Kolay gelsin.

Recep ŞERIT



BİR YORUM YAZIN