Slayt 1 - Verivizyon
Transkript
Slayt 1 - Verivizyon
HAFTA 6 “T-SQL ile Programlar Yazmak" Yaşar GÖZÜDELİ ygozudeli@verivizyon.com http://blog.verivizyon.com/ygozudeli «BM364» Veritabanı Uygulamaları Konu Akışı Programlama dili olarak T-SQL Fonksiyonlar Programlamak Prosedürler Programlamak www.verivizyon.com 2 Programlama Dili Olarak T-SQL Değişkenler Değişkenler ve Sorgular İç İçe Döngü ve Karar Yapıları Hata Fırlatma ve Hata Yakalama Cursor ve Tablo Tipi Değişkenler www.verivizyon.com 3 Değişkenler Programlama Dillerindeki Değişkenler DECLARE @degisken_adi veritipi[(boyut)] DECLARE @enPahaliUrun VARCHAR(200); DECLARE @enPahaliUrun VARCHAR(200) =‘ABC’; DECLARE @enPahaliUrun VARCHAR(80), @urunKod INT, @enYuksekFiyat MONEY; Değer Atamak: SET @degiskenAdi = deger, @degisken2=deger2… SET veya SELECT www.verivizyon.com 4 Değişkenler ve Sorgular SELECT @degiskenAdi=degerifadesi,sutun_isimleri Normal SELECT ifadesinin devamı... DECLARE @enYuksekFiyat MONEY; SELECT @enYuksekFiyat=MAX(listeFiyat) FROM tblUrun; SELECT @enYuksekFiyat; DECLARE @enYuksekFiyat MONEY; SELECT @enYuksekFiyat= 23799.0328; İşaret += -= *= /= %= Karşılığı Kendisi ile Toplayarak Atamak Kendisinden çıkartıp atamak Kendisi ile çarpıp atamak Kendisini bölüp atamak Kendisinin modunu alıp atamak DECLARE @sayac INT=0; SET @sayac +=7; SELECT @sayac as arti7; SET @sayac -=2; SELECT @sayac as eksi2; SET @sayac *=10; SELECT @sayac as carpi10; SET @sayac /=5; SELECT @sayac as bolu5; SET @sayac %=8; SELECT @sayac as mod8; www.verivizyon.com 5 Değişkenler ve Sorgular-2 ~ Değil ^ Bit seviye XOR & Bit seviye AND | Bit seviye OR DECLARE @dogruMu BIT SET @dogruMu =1 SELECT ~@dogruMu www.verivizyon.com 6 Batch Kavramı GO : Batch sonu USE dukkan GO -- Bir T-SQL sorgu yığını bitti ve yenisi başladı. (hata yok) DECLARE @degisken VARCHAR(50) SELECT @degisken = 'Merhaba Dünya.' GO PRINT @degisken -- (Hata yapıldı! Çünkü değişken bir önceki yığında tanımlanmıştı. Artık geçersiz) GO --açıklama buraya yazılamamalıdır!!! sp_who --Yeni yığın başladı ve hemen SP çağrıldı. (hata yok) SELECT @@VERSION --Ardından başka bir sorgu..(hata yok) sp_who --(hata var!) doğrusu, EXEC sp_who olacaktı. GO www.verivizyon.com 7 Tablo Tipi Değişken www.verivizyon.com 8 Karar Yapıları IF WHILE CASE(X) TRY-CATCH DECLARE @enYuksekFiyat Money SELECT @enYuksekFiyat=MAX(listeFiyat) FROM tblUrun if (@enYuksekFiyat>20000) BEGIN --20.0000'den pahalı ürün varsa print 'Bu ürünlerden bazıları çok pahalı' END else if(@enYuksekFiyat>2000) BEGIN --2.000-20.000 arası ise: print 'Bu ürünler çok da pahalı değil' END else BEGIN END GO -- 200'dan da az ise: print 'Bu ürünler ucuz ürün kategorisinde' IF(şartlar1) BEGIN … kodlar .... END ELSE IF(şartlar2) BEGIN DECLARE @sayac INT ... SELECT @sayac = 1 END WHILE (@sayac < 15) ELSE BEGIN .... END END GO www.verivizyon.com BEGIN SELECT @sayac = @sayac + 1 IF (@sayac=11) CONTINUE PRINT 'sayac=' PRINT @sayac 9 Konu Akışı Programlama dili olarak T-SQL Prosedürler Programlamak Fonksiyonlar Programlamak www.verivizyon.com 10 Stored Procedure’ler Programlamak En Basit Stored Procedure Dışarıdan Parametreler Dışarıya Parametreler SP Ayarlarını Yapmak www.verivizyon.com 11 SP Oluşturmak-Değiştirmek CREATE PROC[EDURE] prosedur_adi [WITH seçenekler] ALTER PROC[EDURE] AS prosedur_adi [WITH seçenekler] AS CREATE PROC SP$bugunkiSiparisler T-SQL ifadeleri... AS GO SELECT K.isim + ' ' + K.Soyad , K.email, S.* FROM tblSiparis S JOIN tblKullanici K ALTER PROC SP$GunlukSatis WITH ENCRYPTION ON K.kullaniciKod=S.KullaniciKod AS WHERE siparisTarih < GETDATE()-1 SET NOCOUNT ON AND siparisTarih > GETDATE()+1 SELECT COUNT(*) FROM tblSiparisDetay SD JOIN tblSiparis S GO EXEC SP$bugunkiSiparisler ON SD.faturaKOD = S.faturaKOD WHERE S.siparisTarih > GETDATE()-1 AND S.siparisTarih < GETDATE()+ 1 SET NOCOUNT OFF GO www.verivizyon.com 12 Parametrik SP’ler INPUT CREATE PROC <proc_ismi>( @girdiParametre1 tipi [, @girdiParametre2] ) <SECENEKLER> CREATE PROC SP$sepetim( AS @kullaniciKod …. Sorgu …. {sabit değeri parametre ile değiştir} INT ) AS SET NOCOUNT ON SELECT S.UrunKod,U.UrunAd,S.Adet FROM tblSepet S INNER JOIN tblUrun U ON U.UrunKod=S.UrunKod WHERE S.KullaniciKod=@KullaniciKod SET NOCOUNT OFF GO RETURN CREATE PROC SP$UrunListele ( @marka VARCHAR(50) = NULL ) AS IF (@marka IS NULL) RETURN …. GO Sp$sepetim @kullaniciKod=2 EXEC sp$sepetin 2 Prosedür veya Fonksiyondan çıkmak için Tek başına return de denilebilir. Devam eden yerler işletilmeden çıkılır Parametre geçerliliğini denetlerken kullanılır Bir durum kodu döndürmek için Sadece ve sadece int tipten bir tek değer döndürebilir. Genellikle kaç kaydın etkilendiğini döndürmede kullanılır www.verivizyon.com 13 SP’lerde Parametrelerle Çalışmak CREATE PROC Merhaba( @DogumTarih DateTime, Input Ağa’, Parameter @AdSoyad Varchar(50) = ‘Sarı Çizmeli Mehmet @Mesaj VARCHAR(50) =‘Merhaba’ OUTPUT ) AS Input parameter, Default Değer SELECT @Mesaj = CAST(GETDATE()-@DogumTarih AS VARCHAR) var bu parametre isteğe+bağlı ‘Yaşındasınız’ RETURN GETDATE()-@DogumTarih GO --Nasıl Çalıştırılır?EXEC veya GO ‘dan sonra SP Bir tek Integer DECLARE @msg VARCHAR(50),@Yas INT değer döndürebilir. EXEC @Yas=Merhaba, @DogumTarih=’01.01.1974’, @AdSoyad=‘Can CERRAH’, @mesaj=@msg OUTPUT --Sonuçları Görmek için: SELECT @msg,@Yas www.verivizyon.com M.S. ile OUTPUT parametreleri Test Etmek Örnek SP(Pratikte böyle bir SP kullanılmaz!) CREATE PROC ortalayici( @sayi1 smallint, @sayi2 smallint, @sayi3 smallint, @ortalama decimal OUTPUT) AS SELECT @ortalama = (@sayi1 + @sayi2 + @sayi3) / 3 GO Önce Değişken Tanımlanır: DECLARE @sonuc smallint Sonra SP Çağrılır EXEC ortalayici 1,2,12,@sonuc OUTPUT Veya EXEC ortalayici @sayi1=1, @sayi2=2, @sayi3=12, @ortalama=@sonuc Sonra değişkenler SELECT edilir SELECT 'ORTALAMA',@sonuc www.verivizyon.com Konu Akışı Programlama dili olarak T-SQL Prosedürler Programlamak Fonksiyonlar Programlamak www.verivizyon.com 16 Fonksiyonlar Programlamak Skaler Fonksiyonlar Çoklu İfade ile Tablo Döndüren Fonksiyonlar Satırdan Tablo Döndüren Fonksiyonlar www.verivizyon.com 17 Skaler Fonksiyonlar Kodlamak CREATE FUNCTION dbo.SEPETTEKI_URUN_SAYISI( @kullaniciKod INT = NULL SELECT kullaniciAd, isim, soyad ) RETURNS int FROM tblKullanici WITH ENCRYPTION WHERE dbo.SEPETTEKI_URUN_SAYISI(kullaniciKod) AS BEGIN DECLARE @urunSayisi INT SELECT @urunSayisi=SUM(adet) FROM tblSepet WHERE kullaniciKod=@KullaniciKod RETURN @urunSayisi END CREATE FUNCTION fn$SiparisToplamiBul( @faturaKod INT SELECT *, dbo.fn$SiparisToplamiBul(faturaKod) ) RETURNS MONEY FROM tblSiparis AS BEGIN DECLARE @Toplam MONEY SELECT @Toplam= SUM(fiyat*adet) FROM tblSiparisDetay WHERE FaturaKod=@faturaKod >5 as Toplam RETURN @Toplam END GO www.verivizyon.com 18 Satırdan Tablo Döndüren Fonksiyonlar CREATE FUNCTION FN_AlanlarinKodu(@urunKod INT) RETURNS TABLE AS RETURN SELECT kullaniciKod FROM tblSiparisDetay SD INNER JOIN tblSiparis S ON S.faturaKod=SD.FaturaKod WHERE urunKod=@urunKod CREATE FUNCTION FN_BunuAlanBunlariAldi(@urunKod INT) RETURNS TABLE AS SELECT * RETURN FROM FN_BunuAlanBunlariAldi(2627) 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 FN_AlanlarinKodu(@urunKod) FNA ON FNA.KullaniciKod=S.kullaniciKod www.verivizyon.com 19 Çoklu İfade ile Sonuç Döndüren Fonksiyonlar CREATE FUNCTION FN_SEVDIGIM_URUNLER(@KullaniciKod INT) RETURNS @FN_SEPETIM TABLE( urunKod INT,urunAd VARCHAR(250), Adet INT ) AS BEGIN INSERT @FN_SEPETIM SELECT SD.UrunKod,U.UrunAd,SD.Adet FROM tblSiparisDetay SD INNER JOIN tblUrun U ON U.UrunKod=SD.UrunKod INNER JOIN tblSiparis S ON S.FaturaKod=SD.FaturaKod WHERE S.KullaniciKod=@KullaniciKod INSERT @FN_SEPETIM SELECT S.UrunKod,U.UrunAd,S.Adet FROM tblSepet S INNER JOIN tblUrun U ON U.UrunKod=S.UrunKod WHERE S.KullaniciKod=@KullaniciKod RETURN END SELECT * FROM FN_SEVDIGIM_URUNLER(2) www.verivizyon.com 20 Ödev Dukkan veritabanındaki(tblUrun,tblMarka,tblDoviz tabloları) için Kayıt ekleme, silme ve update etme prosedürlerinin parametre imzalarını oluşturun tblUrun tablosu üstünde ürün adı ve ürün marka kodundan arama yapacak bir stored Procedure nasıl kodlarsınız? Ürünleri sepete ekleyecek bir stored procedure kodlayınız. www.verivizyon.com 21 Sonuç Verilere erişim programlanabilir! Prosedürler doğrudan pipeline’a çıktı verir. Fonksiyonlar context içerisinde çalışır ve sorgularda çalışabilir. www.verivizyon.com 22
Benzer belgeler
‹Ç‹NDEK‹LER INDEX Ozarsan textile weaving systems co. www
ATKI BESLEY‹C‹ ÇOK RENK D1, D2, D12 PROJECTILE FEEDER, MS, D1, D2, D12 ................................. 9 ATKI BESLEY‹C‹ TEK RENK D1, D2, D12 PROJECTILE FEEDER, ES, D1, D2, D12 ......................
Detaylı