VERİ TABANI ve YÖNETİMİ - PDF
Download "VERİ TABANI ve YÖNETİMİ"
Ufuk Duygu Adanır
1 VERİ TABANI ve YÖNETİMİ Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü
2 2 BÖLÜM -10- FONKSİYONLAR
3 3 Giriş Geçen haftaki derslerimizde Görünümleri (View) ve Stored Procedure (SP) leri öğrendik. Bu hafta ise fonksiyonlar konusunu ele alacağız: Kullanıcı Tanımlı Fonksiyonlar Skaler Kullanıcı Tanımlı Fonksiyonlar Tablo Döndüren Fonksiyonlar
4 Kullanıcı Tanımlı Fonksiyonlar Fonksiyonlar belli bir sonucu geri döndürmek için tasarlanmış bir veya birden fazla yerde kullanılan yapılardır. Kullanıcı tanımlı fonksiyonlar, tıpkı Stored Procedure ler gibi dışarıdan parametre alabilirler. Aynı zamanda IF ELSE gibi T-SQL in diğer ifadelerinin de kullanılmasına imkan tanırlar.
5 Kullanıcı Tanımlı Fonksiyonlar (devam) Kullanıcı tanımlı fonksiyonlar, SP ler gibi derlendikten sonra tampon bir belleğe atanır ve daha sonra bu tampon bellekten çağrılarak kullanılabilirler. Bir diğer özelliği de view (görünüm) lar gibi bir tablo şeklinde kayıt döndürebilirler.
6 Kullanıcı Tanımlı Fonksiyonlar (devam) Bu fonksiyonları, View ve SP lerden ayıran ve özellikle kullanılması gereken durumlar şöyledir: Dışarıdan parametre alan view tanımlanamamaktadır. Fakat böyle bir durum fonksiyonlarda kullanılabilmektedir. SP ler bir sorgunun parçası olarak birkaç durum dışında çalışmazken fonksiyonlar sorguların içerisinde kullanılabilirler. Örneğin sp_helpdb, sp_helptext gibi prosedürler tek başlarına çalıştırılabilirler, fakat bir sorgunun parçası olarak çalıştırılamazlar.
7 Skaler Kullanıcı Tanımlı Fonksiyonlar Skaler fonksiyonlar, bir işlem neticesinde sadece tek bir değer döndüren fonksiyonlardır. SQL içerisinde tanımlı birçok skaler fonksiyon vardır. Matematiksel, karakter, tarih fonksiyonları vb. Örneğin SELECT GETDATE (l) komutu FROM ifadesi olmadan kullanılabilir. Bu tür yani GETDATE ( ) şeklindeki fonksiyonlar skaler fonksiyonlardır. Bazı durumlarda kullanıcılarda bu tür fonksiyonlara ihtiyaç duyabilirler. Örneğin yapılan alışveriş neticesinde sepette kaç ürün olduğunu döndüren fonksiyon skaler bir fonksiyondur.
8 Skaler Kullanıcı Tanımlı Fonksiyonlar Skaler fonksiyonların genel tanımı şöyledir: CREATE FUNCTION [sahip-ismi] fonksiyon_adı veri_türü,. ) RETURNS skaler_veri_tipi AS BEGIN SQL_ifadeleri RETURN skaler_deger veya değişken END
9 Skaler Kullanıcı Tanımlı Fonksiyonlar Örnek: Bir müşteri kodunu girerek müşterinin sepetinde kaç adet ürün olduğunu bulan bir fonksiyon yazalım.
10 Skaler Kullanıcı Tanımlı Fonksiyonlar Yazmış olduğumuz fonksiyona dikkat ettiğimizde RETUNS deyimi ile fonksiyonun integer tipte bir veri döndüreceği olarak bir değişken tanımlandı. Daha sonra SQL cümlesinde dışarıdan parametre olarak verilen kullanıcıkod bilgisi ile veritabanındaki kullanicikod bilgisi karşılaştırılarak toplam ürün_sayısı hesaplandı değişkenine aktarıldı. RETURN komutu ile elde edilen bu ürün sayısı dışarıya tek bir değer olarak gönderildi.
11 Skaler Kullanıcı Tanımlı Fonksiyonlar Fonksiyonu bir sorgu içerisinde kullanmak isteyelim. Sepetinde 5 ten fazla ürün olan müşterileri bir sorgu yazarak bulalım. Fonksiyonun kullanımı ve SQL cümlesi şöyle olacaktır.
12 Skaler Kullanıcı Tanımlı Fonksiyonlar Örnek-2: Klavyeden girilen iki değerin toplamını gerçekleştiren bir fonksiyon yazınız?
13 Skaler Kullanıcı Tanımlı Fonksiyonlar Bu fonksiyonu dışarıdan iki sayı girerek çalıştırdığımızda aşağıdaki sonuç elde edilecektir.
14 Tablo Döndüren Fonksiyonlar Bu tür fonksiyonlar çalışma prensibi bakımından view lara benzerler fakat farklı olarak dışarıdan parametre de alabilirler. Tablo döndüren fonksiyonların genel kullanım biçimi şöyledir. CREATE FUNCTION [sahip-ismi] fonksiyon_adı ( veri_tipi,..] ) RETUNS TABLE AS RETURN (SELECT cümlesi)
15 Tablo Döndüren Fonksiyonlar (devam ) Örnek-1: Dışarıdan ürün kodu girilen bir ürünün bilgilerini tablo içerisinde arayarak ekrana listeleyen bir fonksiyon yazınız? tblurun tablosu yan tarafta verilmiştir.
16 Tablo Döndüren Fonksiyonlar (devam ) Yazılması gereken fonksiyon aşağıdaki gibidir.
17 Tablo Döndüren Fonksiyonlar (devam ) Yazılan fonksiyon incelendiğinde RETURNS TABLE ifadesi ile bir tablo döndürüleceği belirtilmiştir. Daha sonra RETURN ifadesinde yazılmış olan SELECT cümlesi ile kullanıcıya geri döndürülmesi gereken kayıtlar sorgulanarak gönderilmiştir. Fonksiyonun çalıştırılması şöyledir.
18 Tablo Döndüren Fonksiyonlar (devam ) Örnek-2: Genellikle E-ticaret sitelerinde yer alan ve bir ürünü alanlar bunları da satın aldı şeklinde karşımıza çıkan ürünlerin listesi yer almaktadır. Aynı şekilde bir kullanıcı kodu kullanarak böyle bir liste oluşturacak bir fonksiyon yazalım. Bunun için gerekli olan tablolar şunlardır. tblurun: Ürün bilgilerinin yer aldığı tablodur. tblsiparisdetay: Sipariş detaylarının yer aldığı tablodur. tblsiparis: Siparişi verilen ürünlerin tutulduğu tablodur.
19 Tablo Döndüren Fonksiyonlar (devam ) Bu tablolar aşağıda verilmiştir.
20 Tablo Döndüren Fonksiyonlar (devam ) Bu işlem iki aşamalıdır. Yani iki ayrı fonksiyon yazılmalıdır. Bunlardan birincisi şöyledir: CREATE FUNCTION int) RETURNS TABLE AS RETURN SELECT kullanicikod FROM tblsiparisdetay SD INNER JOIN tblsiparis S ON S.faturaKod=SD.faturaKod WHERE
21 Tablo Döndüren Fonksiyonlar (devam ) Bu fonksiyon belli bir ürünü satın alan kullanıcıya ait kullanıcı kodunun bulunmasını sağlamaktadır. Buradan elde edilecek olan kullanıcı kodu yazılacak olan ikinci fonksiyonda kullanılacaktır. Bu fonksiyon tek başına çalıştırılırsa aşağıdaki sonuç elde edilecektir.
22 Tablo Döndüren Fonksiyonlar (devam ) İkinci yani asıl fonksiyonumuz ise şöyle olacaktır. CREATE FUNCTION int) RETURNS TABLE AS RETURN SELECT U.urunKod,U.urunAd FROM tblurun U JOIN tblsiparisdetay SD ON SD.urunKod=U.urunKod JOIN tblsiparis S ON S.faturaKod=SD.faturaKod JOIN FNA ON FNA.kullaniciKod=S.kullaniciKod
23 Tablo Döndüren Fonksiyonlar (devam ) Bu fonksiyonda ise ürün kodu girilerek bu ürünü alan kişinin başka hangi ürünleri aldığı listelenmektedir. Burada tblurun ve tblsiparisdetay tabloları kullanılarak siparişi verilen ürünler tespit edilmiştir. Ardından tblsiparis tablosu ve elde edilen bu liste faturakod değerleri kullanılarak birleştirilmiştir. Elde edilen yeni liste kullanıcı kodlarına bakılarak bu listede hangi kullanıcının hangi ürünü satın aldığı tespit edilmiştir.
24 Tablo Döndüren Fonksiyonlar (devam ) Bu kodun çalıştırıldığında 2627 ürün koduna sahip ürünü alan kişinin başka hangi ürünleri satın aldığı listelenmektedir.