SQL Function (Fonksiyon) Kullanımı
SQL meraklısı veritabanı uzman adaylarına yeniden merhabalar :)
Sürekli yeni konular öğrendiğimiz makale dizimizde bugün SQL Function (fonksiyon) konusunu öğreneceğiz.
Aslında SQL fonksiyonlarını daha önceden öğrendiğimiz sum ve count deyimlerinden tanıyoruz ancak SQL ile
birlikte gelen hazır fonksiyonlar sorgularımızda yeterli olmadığı için kendi SQL Function'larımızı kendimiz de
yazabiliyoruz..
SQL Function konusu bir önceki makalemizde öğrendiğimiz Stored Procedure yapısına benziyor anca aralarında
bazı farklılıklar yer almaktadır,bunları bi inceleyelim..
SQL Function ile Stored Procedure arasındaki farklar:
1-Stored Procedure 0 ya da daha fazla değer döndürebilir ancak Function yalnızca tek bir değer (scalar) veya
tablo (table) döndürebilir.
2-Stored Procedure transaction yapısını desteklerken, SQL fonksiyonlar desteklememektedir.
3-Stored Procedure parametre yapısı girdi/çıktı biçimindeyken, Function yalnızca girdi parametresi alır ve
işleyebilir.
Burayı biraz açarsak şunu diyebiliriz; diyelim uzunca bir SQL sorgumuz var ve bazı değişkenler belirledik.Bu
değişkenlerin değerlerini Stored Procedure'e parametre olarak veriyoruz ve procedure bunlara değerler
atayarak sonraki sorgu satırına geçiyor.Yani bir nevi içeriden değer atama diyebiliriz.
Eğer yazılım altyapınız varsa özellikle C# programlama dilindeki ref out parametre
yapısına benzetebiliriz.Yazılım bilginiz yoksa da bu maddeyi genel kültür olarak bi köşeye not alabilirsiniz.
4-Stored Procedure içinden SQL Function çalıştırabiliriz ancak SQL Function içerisinde Stored Procedure
çalıştıramayız.
5-Koşullu (where deyimi olan) Select sorgusu içerisinde Stored Procedure çalıştıramayız ancak SQL
Function çalıştırabiliriz.
6-Stored Procedure içerisinde try-catch denilen hata yakalama mekanizmasını kullanabilirken Function
yapısında kullanamayız.
7-Stored Procedure'ü çalıştırmak için şart olmamakla birlikte "execute" (çalıştır) sözcüğünü kullanırken,
Function yapısında print dbo. metoduyla ya da "select dbo." biçiminde
çalıştırmak mümkündür.
Not:Tablo döndüren fonksiyonlarda "select * from dbo.FonksiyonAdı>" sorgusuyla verileri listeleriz.
8-Stored Procedure'ü çalıştırma anında verdiğimiz parametre yapısı
"execute "
şeklindeyken,Function'da parantezlerden yararlanarız:
"Select dbo.()"
Not:Bir veritabanında tablolar,viewler,stored procedureler,indexler birer veritabanı nesnesidir.
Değer döndüren SQL fonksiyonlarına dbo ön eki eklemek zorundayız,ancak tablo döndüren fonksiyonlarda
bu opsiyoneldir.
SQL fonksiyon yapısının Stored Procedure'e göre avantajları ve dezavantajları yer almaktadır,hal böyle olunca
iyi bir database admin'in (veritabanı yöneticisi) hem function hem de stored procedure'lerle rahatlıkla
çalışabilmesi gerekiyor.
Eğer veritabanı yöneticisi olmasanız bile yazılımcı hatta IT uzmanı olsanız dahi bu konulardan biraz haberiniz
olursa, sizden istendiğinde kolaylıkla çalışabilirsiniz.Sonuçta teknoloji adamıyız. :)
Dönüş tiplerine göre SQL fonksiyonları 2'ye ayrılmaktadır; bunlar değer döndüren (scalar) ve tablo döndüren
(table) fonksiyonlardır.Bu ikisi dışında SQL veritabanı yönetim sistemiyle hazırda gelen Aggregate ve System fonksiyonlarına da sahibiz.
Dipnot olarak belirtmekte fayda var; SQL fonksiyonlarına parametre vermek zorunda değiliz!
Yazacağımız fonksiyonun tek bir değer döndürebilmesini istiyorsak fonksiyon yapısındaki returns ifadesinin yanında
o değer tipini (int,nvarchar gibi) yazar ya da tablo döndürmesini istiyorsak "table" yazarız.
Şimdi gelelim SQL Function nasıl yazılır çizilir konularına...
Değer döngüren SQL function oluşturmak için:
Değer döndüren SQL function düzenlemek için:
SQL Server Management Studio'yu açıyoruz ve BakkalDB veritabanımızın yapısını hatırlamak adına inceliyoruz:
Yapmak istediğimiz şu olsun; öyle bir fonksiyon oluşturalım ki sisteme kayıtlı ilk müşterimizin adını ve soyadını getirsin.Böylece değer döndüren SQL Function konusunu öğreneceğiz.
Öncelikle SQL fonksiyonumuzu yazalım:
SQL fonksiyonumuzu çalıştıralım:
ya da
Gördüğünüz gibi tıpkı Stored Procedure'e benzer bir şekilde çalışma sözkonusu ancak yukarıdaki 8 maddelik farklar konusunu gözardı etmemek gerekiyor.
Değer döndüren SQL Function konusundan sonra şimdi de tablo döndüren fonksiyonları öğrenelim.
Tablo döndüren fonksiyonlar tıpkı select sorguları ve view (görüntü) konusunda öğrendiğimiz gibi SQL sorgusu sonucunda gelen tablo yapısını yansıtır.
Tablo döndüren SQL Function yazmak için:
Tablo döndüren SQL Function düzenlemek için:
Bu örneğimizde de ilk 3 müşterimizi tablo halinde getirelim:
Önceki yazdığımız fonksiyondan farklı olarak, sonucun tablo halinde dönmesi gerektiğini "returns table" olarak
tanımladık.
Aklınızda şunu tutmaya çalışın; tek bir satırda tek bir sayı,metin,karakter gelecekse bu fonksiyonun değer döneceğini
aksi halde tek bir satırda dahi olsa birden çok değerler dizesi geliyorsa bu fonksiyonun tablo yapısında döneceğine
işarettir.Bu konuda Microsoft Excel tablo yapısını hayal ederek karar vermenizi öneririm.
Tablo döndüren SQL fonksiyon konusundan sonra şimdide fonksiyonumuzu alter deyimiyle değiştirelim ve ilk 5 müşterimizi getirtelim:
Elbette bu defalık fonksiyon adındaki 3 sayısını gözardı ediyoruz. :)
SQL Function konusunda daha önce Stored Procedure'de öğrendiğimiz parametre yapısına bakalım; parametre denilen
kavram "daha sonra dışarıdan elle yazılacak değere göre çalışacak yapının değeridir." Bu cümleyi daha önce parametre
konusunu bilmeyen okuyucularım için yazdım :)
Örnek üzerinden gidelim ve Müşteri ID değerine göre alışveriş listesini getiren bir SQL function yazalım.Bu fonksiyon adı
üzerinde bir liste getireceği için değer dönüşlü değil tablo dönüşlü olacaktır:
Parametre konusunda dikkat edeceğimiz nokta şudur: eğer parametre fonksiyonun içindeki bir SQL sorgusunda kullanılacaksa o sorguya ait tablonun veri tipine uygun olarak yazılmalı,bu örneğimizde MusteriID değerini int tipinde
tutmamızın sebebi select sorgumuzun karşılık geldiği Müşteriler tablosundaki MusteriID adlı kolonun int tipinde
varolduğudur.
SQL fonksiyonumuzu yazdıktan sonra sıra geldi parametre vererek çalıştırmaya:
Bu sayede SQL Function kullanmayı da öğrenmiş olduk; unutmayın SQL function kullanmasanız bile kullanmayı bilmeniz
size iş hayatınızda avantaj sağlayacaktır çünkü Stored Procedure olsun View olsun Function yapısı olsun bu yapıların varolmasının mutlaka bir nedeni vardır. :)
SQL Function yapısını ve çalışma şeklini öğrendiğimize göre bir sonraki veritabanı makalemizde görüşmek üzere
hoşçakalın esen kalın derken az daha Function silmeyi unutuyorduk :)
Daha önceden oluşturulmuş bir fonksiyonu silmek için drop deyimini kullanıyoruz:
Örnekle gösterecek olursak:
Fonksiyonumuz silindiğine göre şimdi hoşçakalın diyebilirim :)
Hoşçakalın!
Sürekli yeni konular öğrendiğimiz makale dizimizde bugün SQL Function (fonksiyon) konusunu öğreneceğiz.
Aslında SQL fonksiyonlarını daha önceden öğrendiğimiz sum ve count deyimlerinden tanıyoruz ancak SQL ile
birlikte gelen hazır fonksiyonlar sorgularımızda yeterli olmadığı için kendi SQL Function'larımızı kendimiz de
yazabiliyoruz..
SQL Function konusu bir önceki makalemizde öğrendiğimiz Stored Procedure yapısına benziyor anca aralarında
bazı farklılıklar yer almaktadır,bunları bi inceleyelim..
SQL Function ile Stored Procedure arasındaki farklar:
1-Stored Procedure 0 ya da daha fazla değer döndürebilir ancak Function yalnızca tek bir değer (scalar) veya
tablo (table) döndürebilir.
2-Stored Procedure transaction yapısını desteklerken, SQL fonksiyonlar desteklememektedir.
3-Stored Procedure parametre yapısı girdi/çıktı biçimindeyken, Function yalnızca girdi parametresi alır ve
işleyebilir.
Burayı biraz açarsak şunu diyebiliriz; diyelim uzunca bir SQL sorgumuz var ve bazı değişkenler belirledik.Bu
değişkenlerin değerlerini Stored Procedure'e parametre olarak veriyoruz ve procedure bunlara değerler
atayarak sonraki sorgu satırına geçiyor.Yani bir nevi içeriden değer atama diyebiliriz.
Eğer yazılım altyapınız varsa özellikle C# programlama dilindeki ref out parametre
yapısına benzetebiliriz.Yazılım bilginiz yoksa da bu maddeyi genel kültür olarak bi köşeye not alabilirsiniz.
4-Stored Procedure içinden SQL Function çalıştırabiliriz ancak SQL Function içerisinde Stored Procedure
çalıştıramayız.
5-Koşullu (where deyimi olan) Select sorgusu içerisinde Stored Procedure çalıştıramayız ancak SQL
Function çalıştırabiliriz.
6-Stored Procedure içerisinde try-catch denilen hata yakalama mekanizmasını kullanabilirken Function
yapısında kullanamayız.
7-Stored Procedure'ü çalıştırmak için şart olmamakla birlikte "execute" (çalıştır) sözcüğünü kullanırken,
Function yapısında print dbo.
çalıştırmak mümkündür.
Not:Tablo döndüren fonksiyonlarda "select * from dbo.FonksiyonAdı>" sorgusuyla verileri listeleriz.
8-Stored Procedure'ü çalıştırma anında verdiğimiz parametre yapısı
"execute
şeklindeyken,Function'da parantezlerden yararlanarız:
"Select dbo.
Not:Bir veritabanında tablolar,viewler,stored procedureler,indexler birer veritabanı nesnesidir.
Değer döndüren SQL fonksiyonlarına dbo ön eki eklemek zorundayız,ancak tablo döndüren fonksiyonlarda
bu opsiyoneldir.
SQL fonksiyon yapısının Stored Procedure'e göre avantajları ve dezavantajları yer almaktadır,hal böyle olunca
iyi bir database admin'in (veritabanı yöneticisi) hem function hem de stored procedure'lerle rahatlıkla
çalışabilmesi gerekiyor.
Eğer veritabanı yöneticisi olmasanız bile yazılımcı hatta IT uzmanı olsanız dahi bu konulardan biraz haberiniz
olursa, sizden istendiğinde kolaylıkla çalışabilirsiniz.Sonuçta teknoloji adamıyız. :)
Dönüş tiplerine göre SQL fonksiyonları 2'ye ayrılmaktadır; bunlar değer döndüren (scalar) ve tablo döndüren
(table) fonksiyonlardır.Bu ikisi dışında SQL veritabanı yönetim sistemiyle hazırda gelen Aggregate ve System fonksiyonlarına da sahibiz.
Dipnot olarak belirtmekte fayda var; SQL fonksiyonlarına parametre vermek zorunda değiliz!
Yazacağımız fonksiyonun tek bir değer döndürebilmesini istiyorsak fonksiyon yapısındaki returns ifadesinin yanında
o değer tipini (int,nvarchar gibi) yazar ya da tablo döndürmesini istiyorsak "table" yazarız.
Şimdi gelelim SQL Function nasıl yazılır çizilir konularına...
Değer döngüren SQL function oluşturmak için:
Değer döndüren SQL function düzenlemek için:
SQL Server Management Studio'yu açıyoruz ve BakkalDB veritabanımızın yapısını hatırlamak adına inceliyoruz:
Yapmak istediğimiz şu olsun; öyle bir fonksiyon oluşturalım ki sisteme kayıtlı ilk müşterimizin adını ve soyadını getirsin.Böylece değer döndüren SQL Function konusunu öğreneceğiz.
Öncelikle SQL fonksiyonumuzu yazalım:
SQL fonksiyonumuzu çalıştıralım:
ya da
Gördüğünüz gibi tıpkı Stored Procedure'e benzer bir şekilde çalışma sözkonusu ancak yukarıdaki 8 maddelik farklar konusunu gözardı etmemek gerekiyor.
Değer döndüren SQL Function konusundan sonra şimdi de tablo döndüren fonksiyonları öğrenelim.
Tablo döndüren fonksiyonlar tıpkı select sorguları ve view (görüntü) konusunda öğrendiğimiz gibi SQL sorgusu sonucunda gelen tablo yapısını yansıtır.
Tablo döndüren SQL Function yazmak için:
Tablo döndüren SQL Function düzenlemek için:
Bu örneğimizde de ilk 3 müşterimizi tablo halinde getirelim:
Önceki yazdığımız fonksiyondan farklı olarak, sonucun tablo halinde dönmesi gerektiğini "returns table" olarak
tanımladık.
Aklınızda şunu tutmaya çalışın; tek bir satırda tek bir sayı,metin,karakter gelecekse bu fonksiyonun değer döneceğini
aksi halde tek bir satırda dahi olsa birden çok değerler dizesi geliyorsa bu fonksiyonun tablo yapısında döneceğine
işarettir.Bu konuda Microsoft Excel tablo yapısını hayal ederek karar vermenizi öneririm.
Tablo döndüren SQL fonksiyon konusundan sonra şimdide fonksiyonumuzu alter deyimiyle değiştirelim ve ilk 5 müşterimizi getirtelim:
Elbette bu defalık fonksiyon adındaki 3 sayısını gözardı ediyoruz. :)
SQL Function konusunda daha önce Stored Procedure'de öğrendiğimiz parametre yapısına bakalım; parametre denilen
kavram "daha sonra dışarıdan elle yazılacak değere göre çalışacak yapının değeridir." Bu cümleyi daha önce parametre
konusunu bilmeyen okuyucularım için yazdım :)
Örnek üzerinden gidelim ve Müşteri ID değerine göre alışveriş listesini getiren bir SQL function yazalım.Bu fonksiyon adı
üzerinde bir liste getireceği için değer dönüşlü değil tablo dönüşlü olacaktır:
Parametre konusunda dikkat edeceğimiz nokta şudur: eğer parametre fonksiyonun içindeki bir SQL sorgusunda kullanılacaksa o sorguya ait tablonun veri tipine uygun olarak yazılmalı,bu örneğimizde MusteriID değerini int tipinde
tutmamızın sebebi select sorgumuzun karşılık geldiği Müşteriler tablosundaki MusteriID adlı kolonun int tipinde
varolduğudur.
SQL fonksiyonumuzu yazdıktan sonra sıra geldi parametre vererek çalıştırmaya:
Bu sayede SQL Function kullanmayı da öğrenmiş olduk; unutmayın SQL function kullanmasanız bile kullanmayı bilmeniz
size iş hayatınızda avantaj sağlayacaktır çünkü Stored Procedure olsun View olsun Function yapısı olsun bu yapıların varolmasının mutlaka bir nedeni vardır. :)
SQL Function yapısını ve çalışma şeklini öğrendiğimize göre bir sonraki veritabanı makalemizde görüşmek üzere
hoşçakalın esen kalın derken az daha Function silmeyi unutuyorduk :)
Daha önceden oluşturulmuş bir fonksiyonu silmek için drop deyimini kullanıyoruz:
Örnekle gösterecek olursak:
Fonksiyonumuz silindiğine göre şimdi hoşçakalın diyebilirim :)
Hoşçakalın!
siteniz güzel ama siyah üzerine beyaz yazı gözleri çok yoruyor.
biraz daha fazla içerik olsa çok muazzam olurdu :)
cok güzel anlatılmış