Merhabalar...
Mssql üzerinde delete triggerı yazdım ve çalışırken bu hatayı aldım. Hata tam olarak update işleminde gerçekleşiyor.
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit32)'
yazdığım trigger 'ın aynısı insert içinde var ancak onda bir sorun yok.
CREATE TRIGGER [fisdelete] ON [dbo].[muhasebe]
FOR DELETE
AS
declare @fisno numeric (9)
declare @sirket varchar(50)
declare @sube varchar(50)
declare @borcbakiye decimal(12,2)
declare @alacakbakiye decimal(12,2)
declare @bakiye decimal(12,2)
declare @yil varchar(4)
SET NOCOUNT ON
select @fisno=fisno,@sirket=sirket,@sube=sube,@yil=yil from deleted
select @borcbakiye=sum(toplamtutar) from muhasebe
where fisno=@fisno
and sirket=@sirket
and sube=@sube
and borcalacak='B'
select @borcbakiye=sum(toplamtutar) from muhasebe
where fisno=@fisno
and sirket=@sirket
and sube=@sube
and borcalacak='A'
set @bakiye=@borcbakiye-@alacakbakiye
update muhasebe set
bakiye=@bakiye
where fisno=@fisno
and sirket=@sirket
and sube=@sube
exec sp_yevmiyeno_duzenle @sirket,@sube,@yil
Bu trigger muhasebe tablosundan bir kayıt silinince yine aynı tabloda silenen fiş numarasına sahip fiş kalemlerinin bakiyesini düzenliyor. Acaba tablodan kayıtlar güncellenince kısır bir dongüyemi giriyor. Yani update işlemi olunca ilgili satırlar silinip yeniden yazıldığı için bu trigger süreklimi çalışıyor.Eğer böyle ise çözüm ne olabilir ? Yardımlarınızı bekliyorum...
Maximum stored procedure, function, trigger, or view........
Bence sorun yapınızda görünüyor. Bir muhasebe kaydını siliyorsunuz (master) ve bunun detayları güncelleniyor öyle değil mi? Bu niye kısır döngüye girsin ki?
Yapınızı bir gözden geçirmenizde fayda var. Fahrettin abinin yaptığı bir örnek vardı. Basitte olsa mantığı kavramanız açısından faydalı olacaktır. Temel ilke olarak bu tür BAKIYE tablolarınını diğer tablolardan bağımsız yapmak lazım.
Kolay gelsin.
Yapınızı bir gözden geçirmenizde fayda var. Fahrettin abinin yaptığı bir örnek vardı. Basitte olsa mantığı kavramanız açısından faydalı olacaktır. Temel ilke olarak bu tür BAKIYE tablolarınını diğer tablolardan bağımsız yapmak lazım.
Kolay gelsin.
select @fisno=fisno,@sirket=sirket,@sube=sube,@yil=yil from deleted
diyorsunuz, sonra da
update muhasebe set
bakiye=@bakiye
where fisno=@fisno
and sirket=@sirket
and sube=@sube
diyorsunuz.
Sildiğiniz kaydı UPDATE ediyor gibisiniz.
İsterseniz siz diğer Muhasebe TRIGGER'larını ve Stored Procedure'ü gönderin. Bakalım.
İyi çalışmalar.
diyorsunuz, sonra da
update muhasebe set
bakiye=@bakiye
where fisno=@fisno
and sirket=@sirket
and sube=@sube
diyorsunuz.
Sildiğiniz kaydı UPDATE ediyor gibisiniz.
İsterseniz siz diğer Muhasebe TRIGGER'larını ve Stored Procedure'ü gönderin. Bakalım.
İyi çalışmalar.
Selamlar,
İç içe çağrılabilir Trigger veya SP sayısı M$-SQL Serverda çok kısıtlıdır, bu kısıt 2005'de biraz daha arttırdılar (yani iç içe çağrılabilme sayısını arttırdılar) ama bence hala anlamsız geliyor bana.
Bu sebeple bu tür UPDATE INSERT'lerden kaçının (ama M$-SQL Serverda)
Kolay Gelsin
İç içe çağrılabilir Trigger veya SP sayısı M$-SQL Serverda çok kısıtlıdır, bu kısıt 2005'de biraz daha arttırdılar (yani iç içe çağrılabilme sayısını arttırdılar) ama bence hala anlamsız geliyor bana.
Bu sebeple bu tür UPDATE INSERT'lerden kaçının (ama M$-SQL Serverda)
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sayın hakan can
muhasebe tablosunda aynı fisno ya sahip birden fazla kayıt olabiliyor.
Yani tablola 1 fiş numarasına sahip 10 tane satır var.
ben burda bir tanesi sildiğimde yine 1 numarasına sahip 9 kayıt kalıyor.
ordaki update ifadesinde 9 tane satırı update ediyor. yani aynı silinen kayıt işlem görmüyor.
ancak buradaki sorun şudur ;
muhasebe tablosundan bir kayıt silinince başlayan trigger update ifadsi ile devam ederken updateden dolayı trigger tekrar çalışıyor.( sil / yaz ) her defasında da update olduğu için trigger sürekli çalışıyor. Triggerda yazdığım kodları procedure haline getirip manuel olarak çalıştırıyorum.
muhasebe tablosunda aynı fisno ya sahip birden fazla kayıt olabiliyor.
Yani tablola 1 fiş numarasına sahip 10 tane satır var.
ben burda bir tanesi sildiğimde yine 1 numarasına sahip 9 kayıt kalıyor.
ordaki update ifadesinde 9 tane satırı update ediyor. yani aynı silinen kayıt işlem görmüyor.
ancak buradaki sorun şudur ;
muhasebe tablosundan bir kayıt silinince başlayan trigger update ifadsi ile devam ederken updateden dolayı trigger tekrar çalışıyor.( sil / yaz ) her defasında da update olduğu için trigger sürekli çalışıyor. Triggerda yazdığım kodları procedure haline getirip manuel olarak çalıştırıyorum.