Bu yazımda Sql fonksiyonlarını önemini ve nasılyazılacağını anlatmaya çalışacağım. Önce şöyle başlayalım; bunun için şöyle birörnek düşünelim: bir tekstil firmasına ait sql tablosu olsun. Bu firmanıngömlek satışlarını gösteren bir kolon da kdvsiz fiyat diğer kolon ise kdvlifiyat ( 1.15* kdvsizfiyatkolonu ) olsun, bunu yapmak iki satırlık bilgi için kolay ama 1000 satırlık kolon için çok zor bir işlemdir . bunu sqlbilgisine sahip bir şöyle yapar:
Select (kdvsizfiyat* 1.15) as kdvlifiyat from tablo
Ama ben bunufonsiyonlar ile nasıl yapılacağını da anlamak ilerde doğabilecek karışıkdurumları anlamakta kolaylık sağlayacaktır.
Şöyle bir tabloyapalım:
Amacım;Veritabanımda müşteri tipini gösteren kolonun içeriğini değiştirmek E ise Erkekve K ise Kadın yazsın; Birde stok adedini brim fiyatı ile çarpsın yeni birkolona eklesin. Peki bunun yararı nedir? Şöyle düşünün bu değerlerin tek selectifadesinde çekilmesi mi?, hesaplanıp yazılması mı? yoksa gerektiği zamançekilmesi mi mantıklıdır? Bence sondurum biraz daha baskın? Neden veritabanı arada sırada ihtiyaç duyacacağım bilgilerle sürekli doldurayım? İhtiyaç duydugumda çağırırım. Gerekli işlemleri yaparım. Kullanıcıya yansıtırım.
Bu sayede veri tabanıda şişmez!
Şöyle bir sqlQuery yazalım:
Create PROCEDURE [dbo].[sp_GetAllProducts]
(
@parameter int
)
AS
if(@parameter=0)
begin
select dbo.func_ReWriteCustomerType(CustomerType) as CustomerType ,
Product,ProductCount,ProductPrice,dbo.func_ProductFunction(ProductCount,ProductPrice)as Total
from dbo.Products
end
else
select dbo.func_ReWriteCustomerType(CustomerType) as CustomerType ,
Product,ProductCount,ProductPrice,dbo.func_ProductFunction(ProductCount,ProductPrice) as Total
from dbo.Products where ProductType=@parameter
return
Şimdi yukarıdakikırmızı yazı ile yazılan dbo. İle başlayan fonksiyonlar sql fonksiyonlarıdır.Bunların içeriğini görelim:
Create FUNCTION[dbo].[func_ProductFunction] (@productprice int,@productcount int)
RETURNS int -- int deger dönecek
AS
BEGIN
declare @Return int
select @Return = @productprice*@productcount-- gönderilen iki deger çarpılıp int olarakdönecektir.
return @Return
end
Create FUNCTION[dbo].[func_ReWriteCustomerType](@customertype nvarchar(5))
RETURNS varchar(5) -- varchar degeri dönecek
AS
BEGIN
declare @return varchar(5)
select @return = case @customertype
when 'E' then 'Erkek Reyonu' -- E gelirse Erkek Reyonu değeri döner
when 'K' then 'Kadın Reyonu' -- K gelirse Kadın Reyonu olacaktır.
else 'Unknown'
end
return @return
endŞimdi sonuçları görelim:
Bu makalede sql fonksiyonları ile tanıştık.Anlaşılmayan bir şey olursa temel sql query leri çalışıp tekrar okumanızıtavsiye ederim.
Yazar : Yusuf KARATOPRAK