KULLANICI TANIMLI FONKSİYONLAR
Fonksiyonları, view ve Stored Procedurelerle karşılaştıralım.
* dışarıdan parametre alan bir view tanımlanamaz. Bu türden ihtiyaçlar için fonksiyon
kullanılır.
* stored procedureleri bir sorgunun parçası olarak kullanamayız. Yada stored prosedürleri
sorgulayamayız. Ancak view ve fonksiyonları sorgulayabiliriz.
* bir select ifadesi içeren stored prosedürler sorgunun FROM, WHERE, IN gibi kısımlarında
kullanılamaz.
* bir tek select ifadesi ile view oluşturamadığımız zaman fonksiyon kullanılır.
* sql server’da tanımlı olmayan REPLACE() gibi fonksiyonları tanımlamak için fonksiyonlar
kullanılır
1- Skaler tanımlı (tek değer döndüren) fonksiyonlar
Skaler değerli fonksiyonlar bir tek değer döndüren fonksiyonlardır. Örnek getdate() bir skaler
fonksiyondur, çünkü tek bir değer yani şu anın tarih ve saatini döndürür.
Bazı durumlarda, buna benzer fonksiyonlara ihtiyaç duyulur. Örneğin bir müşterinin
sepetinde kaç ürünün bulunduğu , kaç sipariş verdiğini döndüren fonksiyonlar tanımlanabilir.
Genel ifade
CREATE FUNCTION fonksiyonAdi(varsa parametreTanimi)
RETURNS geriDonusTipi
AS
BEGIN
Sql deyimi
RETURN geriDonusDeğeri
END
Parametre yapısı, stored prosedürlerle aynıdır.
Örnek:
Bir müşteri no girildiğinde, bu müşterini sepetinde kaç ürün olduğunu bulan bir kullanıcı
tanımı fonksiyon yazınız ve bu fonksiyonu çalıştırınız.
CREATE FUNCTION sepetUrunSayi(@mno int)
RETURNS int
AS
BEGIN
Declare @urunSayi int
Set @urunSayi = ( SELECT sum(miktar) FROM Sepet WHERE mno=@mno)
RETURN @urunSayi
END
Çalıştıralım
SELECT dbo.sepetUrunSayi(4)
Örnek:
CREATE FUNCTION fn_ogrNoyaGorOrtalama( @ogrNo NVARCHAR(10))
RETURNS INT
AS
BEGIN
DECLARE @ogrOrt INT
SET @ogrOrt = (SELECT AVG(n.notu) FROM tbl_ogrenci o
JOIN tbl_ogrenciNot n ON n.ogr_id = o.ogr_id
WHERE o.ogrNo =@ogrNo)
RETURN @ogrOrt
END
Örnek: yukarıdaki fonksiyonu kullanarak, sepetindeki ürün miktarı 15 den fazla olan
müşterileri listeleyiniz
SELECT * FROM musteri
WHERE dbo.sepetUrunSayi(mno) >15
Örnek: 1,2 gibi ay numarası gireceğiz. Ocak, şubat gibi ay adını veren fonksiyon yazınız. Ay
değeri 12 büyük girildiğinde tanımsız yazsın
CREATE FUNCTION AyAdi (@ay int)
RETURNS nvarchar(20)
AS
BEGIN
RETURN
(
SELECT CASE @ay
WHEN 1 THEN 'Ocak'
WHEN 2 THEN 'Şubat'
WHEN 3 THEN 'Mart'
WHEN 4 THEN 'Nisan'
WHEN 5 THEN 'Mayıs'
WHEN 6 THEN 'Haziran'
WHEN 7 THEN 'Temmuz'
WHEN 8 THEN 'Ağustos'
WHEN 9 THEN 'Eylül'
WHEN 10 THEN 'Ekim'
WHEN 11 THEN 'Kasım'
WHEN 12 THEN 'Aralık'
ELSE 'Tanimli Değil'
END
)
END
çok başarılı bir çalışma. Bu notları heryerde bulamıyoruz çok teşşekkür ederiz..
YanıtlaSilRica ederim , yaralı olduğuna sevindim
YanıtlaSilAli Hocanın pdf dosyasından alınmış, Ben bir başarı göremiyorum... ama yine de kopyala yapıştır yapmakta bir uğraş ;)
YanıtlaSil