Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Benzer bir sunumlar


... konulu sunumlar: "© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi"— Sunum transkripti:

1 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
HAFTA 9 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

2 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Hatırlatma: Geçen hafta Cursor kullandık © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

3 use northwind DECLARE deneme2 CURSOR FOR SELECT BirimFiyati,UrunAdi from Urunler GO INT nvarchar(40) OPEN deneme2 FETCH deneme2 INTo WHILE BEGIN PRINT ' ' END CLOSE deneme2 DEALLOCATE deneme2

4 Sistem Fonksiyonları Her SQL Server veritabanında sistem fonksiyonlarının tanımları Programmability\Functions\System Functions altında mevcuttur Sorgularda kullandığımız çok-satır alıp tek satır döndüren Avg, Sum Max, Min ve Count gibi fonksiyonlar Aggregate Functions altındadır.

5 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Peki fonksiyonlar neden kullanılır? Pratiklik: Bir işlemi her defasında yazmaktansa bir kere tanımlayıp, her yerden çağırma olanağı sunar. Kod Okunabilirliği: Bir script içerisinde daha az kod kullanılacağından dolayı, bizi kod karmaşasından kurtarır. Performans: Fonksiyonların en önemli özelliğidir. Nasıl bir performanstan bahsediyoruz biraz inceleyelim. Bir sorgu çalışmadan önce 5 aşamadan geçer. Önce kodun yazım hataları, syntax 'ı, semantic 'i kontrol edilir(Parse). Daha sonra sorguda kullanılan tabloların kolonları var mı, ona bakılır(Resolve). Bu ıslemden sonra sorgunun sonucunu nasıl döndüreceğini, indexlemeleri kontrol eder(Optimize). Daha sonra döndüreceği şeklı belirledikten sonra derleme işlemi yapılır(Compile). Son olarak sorgu çalışır ve sonuç döner(Execute). Fonksiyonumuz çalıştığında, "compile" işlemi dahil compile 'dan önceki tüm aşamaları işlemeden geçer. Geriye sadece "execute" işlemi kalır. Bu da önemli bir hız demektir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

6 Kullanıcı Tanımlı Fonksiyonlar
Sistem fonksiyonlarına ilave olarak kullanıcılar da 3 farklı türde fonksiyon tanımlayabilir: Table Valued Functions: Tablo döndürebildiği için sorguda tablo gibi kullanılabilen (from sonrasında yazılabilen) fonksiyonlar Scalar Valued Functions: bir yada birkaç parametre alıp, tek bir değer döndüren fonksiyonlar Aggregate Functions: Sum, Avg gibi çok değer alıp tek değer döndüren fonksiyonlar

7 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE FUNCTION BugununTarihi() returns datetime AS BEGIN DATETIME GETDATE() END select dbo.bugununtarihi() © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

8 Fonksiyon Örneği CREATE FUNCTION NetMaasHesapla numeric(10,2) ) RETURNS numeric(10,2) AS BEGIN numeric(10,2) IF > 5000) ELSE END

9 Select PerNo, Ad, Soyad, Maas AS [Bürüt Maaş],
Fonksiyonu Kullanma Kullanıcı tanımlı fonksiyonlar da, yerleşik SQL fonksiyonları gibi sorgu içinde kullanılabilirler (SP kullanılamaz). Yerleşik (built in) fonksiyonlardan farklı olarak öncesinde şema ismi (dbo) yazılmalıdır. Select PerNo, Ad, Soyad, Maas AS [Bürüt Maaş], dbo.NetMaasHesapla(Maas) AS [Net Maaş] From Personel;

10 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Tablo olarak UDF Sayısal değerli fonksiyondan tek farkı döndürdüğü verinin tablo olmasıdır. Viewlerle büyük benzerlikler içerir ancak farklı olarak dışarıdan parametre alabilirler. Örneğin; "fn_ilegore " alıştırması bu tip bir fonksiyon sayesinde yapılmıştır. CREATE FUNCTION fn_ilegore varchar(50)) RETURNS table AS RETURN Select * from Personeller where Go select * from dbo.fn_ilegore('london') Oluşturulan örnek fonksiyona Programmability-> Functions-> Table-valued Functions yoluyla ulaşılabilir. Fonksiyonu çalıştırmak için aşağıdaki örnek kod çalıştırılmalıdır: © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

11 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE FUNCTION int ) RETURNS MONEY begin DECLARE @toplam money (BirimFiyati*Miktar) FROM SatisDetaylari AS sd INNER JOIN Satislar as s ON sd.SatisID=s.SatisID WHERE and ) GROUP BY SatisTarihi end SELECT dbo.hesap1(1996,9) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

12 Prosedür ile Fonksiyon arasındaki Temel Farklar:
Saklı Yordam (SY) Kullanıcı Tanımlı Fonksiyon (KTF) Select ifadesi içinde kullanılamaz Select ifadesi içinde kullanılabilir Genellikle bir işi gerçekleştirmek için kullanılır Genellikle bir hesaplama için kullanılır Değer döndürmesi şart değildir Mutlaka değer döndürmelidir Tüm veri türlerini döndürebilir Image gibi bazı veri türlerini döndüremez Daha fazla girdi parametresi alabilir (21000 adet) En fazla 1023 girdi parametresi alabilir Geçici tabloları kullanabilir Geçici tabloları kullanamaz Dinamik SQL yürütebilir Dinamik SQL yürütülemez Hata İşleme desteği vardır Hata işleme desteği yoktur (RAISEERROR veya kullanılamaz) Non-Deterministik fonksiyonlar kullanılabilir GETDATE() gibi non-deterministik fonksiyonlar kullanılamaz

13 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
create function dbo.tarihFormatla nchar(3)) returns nchar(10) as begin nchar(4) = nchar(2) = nchar(2) = nchar(10) if = 1 = '0' if = 1 = '0' = 'dmy' else = 'mdy' else = 'ymd' end go select dbo.tarihFormatla(getdate(),'/','ymd') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

14 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Parametre olarak verdiğimiz "ad" yada "soyad" 'a göre "Employees" tablosundan veriler çeksin. "Select" ile çektiği veriler aynı zamanda belirttiğimiz geçici tabloma da "insert" etsin. Burada dikkat edilmesi gereken nokta tabloma ekleyeceğim verilerin, tablomun sütün sayısına ve sütunlarımın tiplerine uygun olması gerektiğidir.  CREATE FUNCTION nvarchar(30)) TABLE (Id INT,Isim NVARCHAR(50)) AS BEGIN             BEGIN SELECT PersonelID,Adi FROM dbo.Personeller         END    ELSE SELECT PersonelID, Adi+' '+SoyAdi AS Isim              FROM dbo.Personeller     RETURN END SELECT * FROM Kisilerim('adsoyad') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi


"© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi" indir ppt

Benzer bir sunumlar


Google Reklamları