VTYS Trigger ile Stored Procedure İç İçe Yazmak

Ders çalışırken yine yeni bir şeyler denedim, umarım sınavda bu tarz şeyler çıkar, yaptığım işlem bir procedure yazmak ve bu procedure içinde update işlemi yaparken trigger ‘ın update tetikleyicileri ile istediğimiz işlemleri kontrol etmek, eğer Trigger ve Stored Procedure ne diyorsanız bir önceki yazıyı inceleyebilirsiniz.

İlk olarak bir tablo oluşturun, adı ‘ atm ‘ olacak.

trggerpro

İsminden de anlayacağınız gibi atm işlemleri olarak düşünülen bir kaç işlem yapacağız, bunlar:

  • Para yatırıldığında, müşteri bakiyesine eklenecek(stored procedure)
  • Para çekildiğinde eğer bakiye yeterli ise çekilme işlemi yapılıp, müsteri bakiyesinden çekilen tutarı düşülecek(stored procedure)
  • Müşterinin borcu var ise otomatik olarak, o an toplam bakiyeden ödenecek, eğer borcu bakiyeden fazla ise bakiye sıfırlanacak ve borcundan düşülecek eğer para yatırılıyorsa ve kişinin borcu varsa yatan para direk borca kesilecek(Trigger)

 

Genel anlamda yapacaklarımız bunlar ve şimdi ilk olarak procedure’lerimizi yazalım.

PARA ÇEKME


create procedure paracek(

@musteriNo int,

@cekilecekpara int

)

as

declare @musteriBakiye int

select @musteriBakiye=musteribakiye from atm where musterino=@musteriNo

if(@cekilecekpara>@musteriBakiye)

begin

print 'yetersiz bakiye!'

end

else

begin

update atm set musteribakiye=musteribakiye-@cekilecekpara where musterino=@musteriNo

print 'işlem başarıyla gerçekleşti'

end

go

PARA YATIRMA

create procedure parayatir(

@musteriNo int,

@yatacakpara int

)

as

declare @musteriBakiye int

select @musteriBakiye=musteribakiye from atm where musterino=@musteriNo

update atm set musteribakiye=musteribakiye+@yatacakpara where musterino=@musteriNo

print 'işlem başarıyla gerçekleşti'

go

BORÇ KONTROL TRIGGER

create trigger kontrol

on atm

after update

as

declare @musterino int,@musteriborc int,@musteribakiye int,@degisken int,@fark int

set @degisken=0

select @musterino=musterino from inserted

select @musteriborc=musteriborc,@musteribakiye=musteribakiye from atm where musterino=@musterino

if(@musteriborc>@degisken)

begin

set @fark=@musteribakiye-@musteriborc

if(@fark>0)

begin

update atm set musteribakiye=musteribakiye-@musteriborc where musterino=@musterino

update atm set musteriborc=musteriborc-@musteriborc where musterino=@musterino

print 'borcunuzdan dolayı yatan para borcunuzdan düşmüştür!'

end

else

begin

set @fark=@fark*(-1)

update atm set musteribakiye=0 where musterino=@musterino

update atm set musteriborc=@fark where musterino=@musterino

print 'borcunuzdan dolayı yatan para borcunuzdan düşmüştür ve bakiyeniz sıfırlanmıştır!'

end

end

şimdi kayıt girip deneme yapabiliriz, unutmayın

 exec dbo.parayatir 1,500 

şeklinde giriş yapacaksınız, procedure bu şekilde çağrılır. Sorularınız var ise bu gönderinin altına yorum atabilirsiniz, iyi çalışmalar.

Bir Cevap Yazın