Sql ' de Skaler tanımlı Fonksiyonlar 1

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



3 yorum:

  1. çok başarılı bir çalışma. Bu notları heryerde bulamıyoruz çok teşşekkür ederiz..

    YanıtlaSil
  2. Rica ederim , yaralı olduğuna sevindim

    YanıtlaSil
  3. Ali 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

 
© 2014 İrfan Blog ' s | Mehmet İrfan ErdoğanTüm Hakları Saklıdır | r