ib'de insert trigger ında stored procedure kullanımı

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
korhanpinar
Üye
Mesajlar: 8
Kayıt: 29 Eki 2005 10:54

ib'de insert trigger ında stored procedure kullanımı

Mesaj gönderen korhanpinar »

mrb
aşağıdaki kodla tabloya kayıt ekleme sırasında aynı ürün noya sahip kayıt varmı diye bakıyorum. eğer yoksa insert ediyurum. bu procedure insert trigger inda çalıştırılıyor.
navigator dan OK e tıklayınca şu hatayı veriyor : "Too many concurrent executions of the same request". sanırım navigatorda procedure de insert ettiği için 2 kez insert oluyor. bu yuzden hata veriyor. ama sitedeki SP orneğinde procedurun içinde insert kullanılıyordu. 2 defa insert etmeden nasıl kayıt eklenir.

ve bir kitapta kayıt ekleme sırasında "suspend"kullanıldığını gordum. bu komut ne yapıyor?
ilginize tşkr

CREATE PROCEDURE SPI_MY_TABLE1 (
MYF1 INTEGER,
MYF2 VARCHAR(10))
AS
DECLARE VARIABLE KAYIT_SAYISI INTEGER;
begin
select count(*) from my_table1
where my_table1.urun_no=:myf1
into :kayit_sayisi;
if (kayit_sayisi=0) then
insert into my_table1(urun_no, urun_adi) values(:myf1, :myf2);
end^

CREATE TRIGGER TRG_INSERT FOR MY_TABLE1
ACTIVE BEFORE INSERT POSITION 0
AS
begin
execute procedure spi_my_table1 new.urun_no, new.my_field2;
end
SET TERM ; ^

GRANT SELECT,INSERT ON MY_TABLE1 TO PROCEDURE SPI_MY_TABLE1;

GRANT EXECUTE ON PROCEDURE SPI_MY_TABLE1 TO SYSDBA;
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba...
Too many concurrent executions of the same request
Sonsuz döngüye girmişsin.Triggeri tetikliyorsun oda SP yi tetikliyor ve bu böyle devam ediyor. :)

Zaten Trigger SP mantıgında hata var.Neden dersen zaten tabloya veri giriyorsun.SP de bir daha kontrol ettirmene gerek yok...yani yazdığın trigger + SP fazlalık + hatalı kullanım.Bence ikisini de gerek yok..Çünkü aynı yere varıyor...
suspend
Dışarıya sonuç çıkmayacağı için suspend kullanmana gerek yok...
Eğer Select kullanıp dışarıya sonuç gönderiyorsan suspend'i kullanmalısın..Forumda aratıp örneklerine bakabilirsin...

iyi günler...
Cevapla