Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanMeryem Koçoğlu Değiştirilmiş 5 yıl önce
1
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
HAFTA 10 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
2
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
İÇERİK Hatırlatma: Kullanıcı Tanımlı Fonksiyonlar Bu hafta örnekler ile kullanıcı tanımlı fonksiyonlar konusunu ve tetikleyici (trigger) konusunu inceleyeceğiz. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
3
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Öğrenci Numarası (otomatik artan olabilir), Adı Soyadı, Ders Adı, Vize, Final, Ortalama , Durum değerlerini içeren bir tablo oluşturunuz. İçerisine örnek değerler giriniz (en az 10 adet) Ortalama degeri Vizenin %40’ı ile finalin %60’ı alınarak hesaplanmaktadır. Durum alanı ise Ortalama ve Final değerleri kontrol edilerek hesaplanmaktadır. Ortalama>=50 ve Final>=50 ise GEÇTİNİZ yazılsın Final alanında -1 değeri varsa SINAVA GİRİLMEDİ yazılsın Bunların dışındaki durumda ise KALDINIZ yazılsın. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
4
Geçen Haftaki Sunumdaki Hatalı Kısım
UPDATE ogrenciler SET durum = CASE WHEN ort<50 OR final<50 THEN 'Kaldı' WHEN final=-1 THEN 'Sınava Girmedi' ELSE 'Geçti' END GO SELECT * FROM Ogrenciler © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
5
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
ALTER Table Personeller Add Maas money, NetMaas Money, Durum varchar(20) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
6
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Örnek DECLARE deneme3 CURSOR FOR SELECT PersonelID,Unvan from Personeller varchar(20) int OPEN deneme3 FETCH NEXT FROM WHILE BEGIN Representative' update Personeller set where else if @unvani= 'Sales Manager' update Personeller set where else update Personeller set where FETCH NEXT FROM DENEME3 INTO END close deneme3 DEALLOCATE deneme3 SELECT PersonelID,Adi,SoyAdi,Unvan, Maas from Personeller © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
7
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
8
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Saklı yordam içinde kullanıcı tanımlı fonksiyon kullanılabilir mi? © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
9
Fonksiyon Örneği CREATE FUNCTION NetMaasHesapla numeric(10,2) ) RETURNS numeric(10,2) AS BEGIN numeric(10,2) IF > 5000) ELSE END
10
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE PROCEDURE NetHesap1 as begin update Personeller set NetMaas=dbo.NetHesapla(Maas) Select PersonelID, Adi, Unvan, Maas,NetMaas from Personeller end exec NetHesap1 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
11
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
BREAK While döngüsü belirli bir koşul sağlandığı sürece bir ifadeyi veya bloğu tekrar eder. Aşağıdaki döngü Personel tablosundaki ortalama maaş 7000'den küçük olduğu sürece tüm personelin maaşını %10 arttırır. Ayrıca en yüksek maaş 'den büyük olursa da Break ile döngüden çıkılır. WHILE (SELECT AVG(Maas) FROM Personeller) < 7000 BEGIN UPDATE Personeller SET Maas = Maas * 1.1 IF (SELECT MAX(Maas) FROM Personeller) > 10000 BREAK ELSE CONTINUE END SELECT MAX(Maas) AS "En Yüksek Maaş" FROM Personeller © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
12
TRIGGER SQL de bir tabloda herhangi bir işlem yapıldığı anda otomatik olarak aynı tabloda veya başka bir tabloda başka işlemlerinde yapılmasını istediğimiz zamanlarda, Trigger'lar yapılmasını istediğimiz bu işlemi bizim adımıza otomatik olarak gerçekleştirirler. create trigger Isim on TabloAdi for Insert, Update, Delete (Tek tek veya hepsi birden yazılabilir) as islemler
13
Trigger (Tetikleyici)
Bir tabloda değişiklik olduğunda otomatik olarak başlatılan prosedürlere DML Trigger, veritabanı tanımlarında değişiklik olduğunda tetiklenenlere ise DDL Trigger denir. DML Trigger insert, delete veya update ifadelerin belirtilen tabloda oluşması gibi bir olaydan ve bir hareketten (ilgili prosedür) oluşur. Örneğin; personel tablosundan bir kaydın silinmesi olayı gerçekleştiğinde, eski_personel tablosuna personelin numarasını ve işten ayrılma tarihini belirtmek için o anki tarihi kaydeden bir prosedür yazılması ile bir DML Trigger oluşturulabilir.
14
CREATE TRIGGER Guncelle on [SatisDetaylari]
for insert AS int from Inserted from inserted UPDATE Urunler set WHERE
15
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
INSERT INTO SatisDetaylari (SatisID, UrunID, BirimFiyati, Miktar) VALUES (10324, 14,334,10) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
16
Trigger (Tetikleyici) Kullanımı
Trigger'ın tetiklenmesini engellemek için Disable trigger <triggerAdı> on <tabloAdı> Sadece DML Trigger içinden kullanılabilen ve geçici olarak hafızada saklanan inserted ve deleted adında iki tablo vardır. INSERT işleminde yeni eklenen kayıt inserted tablosunda saklanır. DELETE işleminde silinen kayıt deleted tablosunda saklanır. UPDATE işleminde ise güncelleme öncesi eski değer deleted tablosunda, değişen yeni değer inserted tablosunda saklanır.
17
INSTEAD OF TRIGGER 'lar tetikleyici sorgunun YERİNE çalışırlar
INSTEAD OF TRIGGER 'lar tetikleyici sorgunun YERİNE çalışırlar. Ayırdedici tek özellikleri ise BEGIN END satırları arasına yazılıyor olmasıdır..
18
-- ihtiyaç: Urunler tablosundan ürün silinmeye çalışıldığında bu ürünün Sonlandi kolonunu 1 yapsın (Yani Silmesin, Update etsin): CREATE TRIGGER tr_SatisiDurdur ON Urunler INSTEAD OF delete -- Delete 'in çalışmasına izin vermeden trigger çalışsın AS BEGIN int FROM deleted UPDATE Urunler SET Sonlandi=1 WHERE END
19
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
20
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Personeller tablosunda kayıt güncellendiğinde işlem tarihi alanına o anki tarih bilgisi eklensin alter table Personeller add IslemTarihi Datetime © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
21
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
ALTER TRIGGER [dbo].[TrigDegisimTarihi] ON [dbo].[Personeller] AFTER UPDATE AS int = PersonelID FROM inserted UPDATE Personeller SET IslemTarihi = GETDATE() WHERE Personeller.PersonelID --Değişken tanımlamadan da yapılabilir: FROM inserted WHERE Personeller.PersonelID = inserted.PersonelID © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
22
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
UPDATE Personeller SET Maas=Maas*1.2 WHERE PersonelID=13 SELECT PersonelID, Adi, SoyAdi,Maas, IslemTarihi FROM Personeller WHERE PersonelID>=12 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
23
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
INSERT INTO [Personeller] ([SoyAdi] ,[Adi] ,[Unvan] ,[Maas]) VALUES ('Demir','Ahmet','Genel Müdür Yrd.',7500) GO © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
24
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Personeller tablosuna SicilNo alanı eklenecek ve bu alana 1000’den başlayarak birer birer artarak her kayıt için ekleme yapacak T-sql kodunu yazınız. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.