IBExpert ile FireBird kullanarak 2 adet table yaptım. (Cari ve carihar) carihar tablosunun After Insert Trigger`inde aşağıdaki procedure`yi çalıştırıyorum. IBExpert`te carihar tablosundan kayıt girişi yaptığımda Cari tablosuna ilgili değişiklikler yansıyor. (Borc-Alacak-Bakiye) Fakat işin ilginç tarafı Sql editörden Insert into ile kayıt girişi yaptığımda Carihar tablosuna kayıt girmesine rağmen Cari tablosu bundan etkilenmiyor. Yani Borc-Alacak-Bakiye hesaplanmıyor. Bu konuda bir fikri olan varsa, paylaşırlarsa sevinirim. Herkese iyi çalışmalar diliyorum...
create procedure sp_caribakiye (
kod integer)
as
declare variable l_borc bigint;
declare variable l_alacak bigint;
declare variable l_bakiye bigint;
begin
select sum(tutar) from carihar where kod=:kod and durum='giriş' into l_borc;
select sum(tutar) from carihar where kod=:kod and durum='çıkış' into l_alacak;
l_bakiye=:l_borc-:l_alacak;
update cari set borc=:l_borc, alacak=:l_alacak, bakiye=:l_bakiye where kod=:kod;
end
Evet Commit`te ediyorum. Ancak hata bende. Triggerler ile ilgili ufak bir karışıklık olmuş. Yazdığım procedure`yi Carihar`ın değil Cari`nin After Insert Trigger`inden çağırıyormuşum. DDL kısmına bakınca hatamı gördüm. Carihar`da Delete ve Update Trigger`leri normal olarak çalıştığı için kendim kayıt girdiğimde Cari bundan etkileniyormuş.. Kusura bakmayın. Özür diliyorum. Kafam bayağı karışmış..
Tekrar merhaba. Arkadaşlar cari`nin bakiyesini, borc ve alacak tutarını belirttiğim kod ile yapıyorum. Yani Sum fonksiyonunu kullanarak. Bu şekilde yapmam mı veya carihar`a bir işlem eklendiğinde toplama ve çıkarma işlemi yaparak mı bunları hesaplamam performans açısından daha iyi olur? Yani o anda cari`nin borcunu veya alacağını arttırıp-azaltarak mı yapmam daha hızlı çalışır?
haliyle borc ve alacak icin bir alan kullanıp her harekette guncellemek daha hızlı olur.
bu guncellemenin guvenligini saglayabilirsen hic sakıncası olmadan calısması lazım
procedur de kullanabilirsin, ama hızdan odun vereceksin o zaman
hareket sayısı az ise bu hız dusuklugu hic farkedilmez sanırım