Slayt 1 - Verivizyon

Transkript

Slayt 1 - Verivizyon
HAFTA
6
“T-SQL ile Programlar Yazmak"
Yaşar GÖZÜDELİ
[email protected]
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

‹Ç‹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ı