Tags

, , , , ,

İyi Akşamlar Arkadaşlar,

Bu yazımda belli bir işlemi gerçekleştirmek için oluşturulmuş ve derlenmiş Sql ifadeler topluluğundan oluşan Saklı Yordamlardan(Procedure) bahsedeceğim.Umarım anlaşılır olur.

Nasıl oluşturulur?

CREATE PROCEDURE ProcedureAdi(Parametre veriTipi)
AS
BEGIN
—sql ifadeleri
END

??Aşağıda tablo yapıları verilmiş banka veri tabanını kullanarak bir hesaptan başka bir hesaba havale yapılmasını sağlayan saklı yordamı yazalım.

Banka (bid, ad)
Sube(sid, bid, sehir)
HesapTuru(tid, tur)
Musteri(mid, isim, adres, tel)
Hesap (hid, sid, mid, tid, tarih, bakiye)
IslemCesit(cid, islem_adi, masraf)
Islem(hid1, hid2, cid, tutar, tarih, aciklama)

CREATE PROCEDURE havaleYap(
@nereden INT,
@nereye INT,
@nekadar DECIMAL(18,2)
)AS
DECLARE @havaleID INT;
DECLARE @havaleMasraf DECIMAL(18,2);
BEGIN
SELECT @havaleID=cid, @havaleMasraf=IslemCesit.masraf FROM IslemCesit WHERE upper(islem_adi)=’HAVALE’;
IF EXISTS (SELECT * FROM Hesap WHERE hid=@nereden AND bakiye>@nekadar+@havaleMasraf)
BEGIN
INSERT INTO Islem (hid1,hid2,cid,tutar,tarih)
VALUES (@nereden, @nereye, @nekadar, @nekadar,GETDATE());
BEGIN TRANSACTION
UPDATE hesap SET bakiye=bakiye+@nekadar WHERE hid=@nereye;
UPDATE hesap SET bakiye=bakiye-@nekadar-@havaleMasraf WHERE hid=@nereden;
COMMIT
END;
END;

TRANSACTION:Birbirleriyle ilişkili ve arka arkaya çalışması gereken işlemlerimizin hepsinin tek bir işlemmiş gibi birlikte gerçekleşmesi için kullanılan yapıya transaction denir.işlemlerin hepsi ya aynı anda ya gerçekleşir ya da gerçekleşmez.

Mesala yukarıda ki örnekte de olduğu bir hesaptan başka bir hesaba para aktarma işlemi yapılırken hem gönderen hemde alan hesabın bakiye değerlerinin güncellenmesi gerekir ve her iki güncellemede de sıkıntı çıkmadığı takdirde işlem gerçekleşmeli fakat herhangi birinde sıkıntı çıktığında işlem geri alınmalıdır işte bunu TRANSACTION ile sağlıyoruz.

Şimdi procedure’ümüzün çalışıp çalışmadığını kontrol edelim.İlk olarak 4 numaralı hesaptan 5 numaralı hesaba 100.00 havale yapalım.Havale yapmadan önce bakiye bilgilerine ve havale işleminin masrafına bakalım.

AdsızAdsız

Procedure’ümüzü çalıştıralım:

EXEC havaleYap 4,5,100

4 5 numaralı hesapların bakiye bilgilerini tekrar kontrol edelim.

Adsız

Görüldüğü gibi havale işlemi başarılı bir şekilde gerçekleştirilmiştir. : )

Bu günlükte bu kadar Kolay gelsin:)