Stored Procedure-2

Daha önce stored procedure konusu ile giriş yapmıştık. Biraz daha ayrıntılı olarak değinmeye çalışacağım, bilmediğimiz ve dikkat etmemiz gereken bilgileri yazmaya çalışacağım. Stored procedurelerin adhoc sorgulardan daha hızlı ve stabil çalıştığını ve bununda adhoc sorgu için her çalıştırmada tekrar oluşturalacak execution planın stored procedure için ilk çalıştırmada oluşturulması ve diğer seferlerde bu planı oluşturmadan direk kullanmasından kaynaklandığını biliyoruz.

Stored Procedure’lerin diğer avantajlarını da şu şekilde sıralayabiliriz

— Çok fazla işlem içeren stored procedure’ler normal sorgulara göre daha az network trafiği oluştururlar. Bunun sebebi örnek olarak 300 satırlık kod bloğunu çalıştırmak yerine ilgili sp ve paremetreleri gönderilir. Buda uygulama ile sql server arasındaki trafiğin azalmasını sağlar.

–Sp’ler fonksiyonlara benzer olarak yazılan bir kodun aynı şekilde veya farklı parametrelerle tekrar kullanılabilir.

–Sp’lerle bilgi saklama sağlanabilir. Sp’nin içeriğini bunu kullanan kişilerden gizlenmesi ve kullanıcının sadede sp nin yaptığı işi ve nasıl çalıştığıyla ilgilenir.

Output Parametrelerin Kullanımı

Bir stored procedure için parametre tanımladığımızda ve parametrenin  input mu yoksa output mu olduğunu belirtmezsek sql server tarafında default olarak input parametre olarak alınacaktır. Output parametreler input parametrelerden farklı olarak stored procedure içinde yapılan işlem sonucunun bir değişkene atanması ve bu değişkenin stored procedure çalışmasından sonra kullanılmasıdır.


create procedure sp_selProductNumber
@Color varchar(20),
@ProductCount int output
as
begin
 select * from Production.Product where Color=@Color
 select @ProductCount=@@ROWCOUNT
end

Yukarıdaki sp mizde @ProductCount alanı output olarak atanmış, değeri sp içinde tanımlanmış ve stored procedure dışında da bu değer okunabilecektir.


declare @pcount int
exec sp_selProductNumber 'black',@pcount
select @pcount

Stored Procedure’lerin Şifrelenmesi

Oluşturmak istediğimiz bir stored procedure’ün içeriğini şifrelemek için sp adından sonra with encryption ifadesini kullanmalıyız.


create procedure sp_selProductNumber with encryption
@Color varchar(20),
@ProductCount int output
as
begin
 select * from Production.Product where Color=@Color
 select @ProductCount=@@ROWCOUNT
end

Şifrelenen bir sp içeriğini daha sonra  görmek için DAC (Dedicated Admin Connection) kullanarak sql server bağlanarak sys.sysobjvalues view’ini kullanmalıyız.

Stored Procedure Execute As Kullanımı

Execute as deyimi ile veri tabanımız üzerinde oluşturulmuş olan bir sp başka bir kullanıcı yetkileri kapsamında çalıştırabiliriz. Bunun için sp mizi aşağıdaki gibi oluşturabiliriz.


create procedure sp_selProductNumber with execute as caller | owner | self | 'User Name'

Caller parametresi : Varsayılan olarak kullanılan bu parametre kullanılmasa da aynı yetkiye sahip olur.

Owner parametresi: Sp’nin  sahibinin  yetkileriyle çalıştırılmasını sağlar.

User Name parametresi: Bu parametre ise başka bir kullanıcı hesabıyla çalıştırılmasını sağlar.

Stored Procedure’ler Hakkında Bilgi Alınması

Oluşturduğumuz stored procedure’ler hakkında detaylı bilgi almak için sys.sql_modules ve sys.procedures adlı view nesnelerini kullanabiliriz.

İyi çalışmalar…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir