Maximum stored procedure, function, trigger, or view........

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Maximum stored procedure, function, trigger, or view........

Mesaj gönderen bilbeyi »

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...
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Anlaşılan kısır bir döngü var. En fazla iç içe 32 tane çağrılabiliyor.

sp_yevmiyeno_duzenle procedure'ünü ve varsa Muhasebe tablosu ile ilgili diğer Trigger'ları da gönderirseniz problemin nerede olduğunu belki söyleyebiliriz.
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

Aslında alt kısımdaki procedure olmasa da aynı hatayı alıyorum. Exec ile başlayan satırı kapatıp denediğimde de değişen bir şey olmadı. Sorun ordaki update ifadesinde sanırım. Update işlemi olduğunda trigger tekrar çalışıyor. Bunu önlemenin bir yolu yokmudur.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

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.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

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.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Trigger FOR DELETE için.

UPDATE işleminde DELETE trigger'i çalışmaz.

Siz bilirsiniz. İster gönderir ister göndermezsiniz.

İyi çalışmalar.
Cevapla