Fonksiyonlar, belirli işleri yapmak üzere tasarlanmış kod parçalarıdır. Fonksiyonları çalıştırmak, tekrarlanan işleri yapmak üzere, gereksiz kod tekrarını önlemek için yazılırlar.
Gerekli parametreleri alıp, istediğimiz sonuçları geri döndürürler.
Bu yazımızda kullanıcı tanımlı fonksiyonların ne işe yaradığını, nasıl kullanıldıklarına hep birlikte bakalım. Kullanıcı tanımlı fonksiyonlar, dışarıdan parametre alabilir, parse edilir, derlenir ve hafızadan çağrılabilirler. Stored Prosedürlere ve View nesnelerine benzerler. Bir view gibi SELECT sorgularında kullanılabilirler. View'lerde parametreli işlemler yapılmazken fonksiyonlarda bunu yapmak mümkündür.
Kullanıcı tanımlı fonksiyonlar ile neler yapalabilir?
Sürekli gerekleştirilen işlemleri fonksiyonel hale getirilip, kullanım kolaylığı sağlar. SQL tarafından desteklenmeyen fonksiyonlar geliştirebiliriz. Örneğin; doğum gününü kontrolü yapan, bugünün tarihini veren, yaş hesabı yapan vs. fonksiyonlar yazılabilir. Aynı zamanda SQL'de varolan hazır fonksiyonları kullanmayıp, kendi oluşturduğumuz fonksiyonlar ile istediğimiz sonuca ulaşabiliriz. Örneğin; sayının karekökünü alan fonksiyon, kelimenin sağındaki ve solundaki boşlukları silen fonksiyonları yazabiliriz.
Bir fonksiyon oluşturabildiğimiz gibi, fonksiyonlar üzerinde değişiklik işlemleri de gerçekleştirebiliriz ve varolan fonksiyonları silebiliriz. Fonksiyonlar çağırmak için SELECT fonksiyon_adi ( ); şeklinde çağırabilirsiniz, parametre olan bir fonksiyon ise parametre değerlerini girerek fonksiyonu çağırabiliriz.
Fonksiyonların Kullanımı
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ... kullanımı bu şekildedir.
Biz de bir sayının karesini alan fonksiyonu oluşturarak fonksiyon kullanımına bakalım.
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ... kullanımı bu şekildedir.
Biz de bir sayının karesini alan fonksiyonu oluşturarak fonksiyon kullanımına bakalım.
fonksiyonIsmi, oluşturulacak fonksiyon için kullanılan isim.
parametre, fonksiyon dışarıdan gelecek değerleri belirler.
veriTipi, parametreler için kullanılacak veri tiplerini belirler.
RETURNS, scaler fonksiyondan dönecek değerlerin veri tiplerini belirler.
Kendimiz bir örnek senaryo oluşturalım. Kitaplar adında bir tablomuz olsun, kitapların sayfa sayısına göre arama yapılmak istenildiğinde kullanacağımız fonksiyonu oluşturalım.
2 tane kitabım olsun. Sayfa sayısı 150'den büyük olan kitapları sıralayacak fonksiyonumuzu oluşturalım.
Bir başka örnek olarak da 1 ile 100 arasında random sayı üreten fonksiyonu oluşturalım.
Oluşturduğumuz fonksiyonları \df ile görebiliriz.
Fonksiyonumuzun adını değiştirmek için ALTER FUNCTION komutu kullanılır.
Varolan fonksiyonu silmek için de DROP FUNCTION komutunu kullanılır.
Yorumlar
Yorum Gönder