postgresql 8.2-zeos 6.5.1-delphi 2006-windows xp
pg'de yazdığım bir function'dan dönecek result'a göre bazı işlemler yaptırmam gerekli.
Kod: Tümünü seç
CREATE OR REPLACE FUNCTION "public"."fnc_kaydet" (a integer,b varchar, id integer ) RETURNS integer AS
$body$
begin
if b='' then
return 2;
exit;
end if;
if id=0 then
insert into tbl_xx
(xx_a,xx_b)
VALUES
(a,b);
else
update tbl_xx set
xx_a=a,
xx_b=b
where xx_id=id;
end if;
return 0;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
zeosconnection nesnesinin isolation level'ını read commited yapıp query'e ilgili function'ı yazığım vakit
open,refresh yaptığımda
- db'ye herhangibir kayıt girişi olmuyor fakat db controller'de prior ve next ile ilgili kaydı görebiliyorum ve resultını alabiliyorum. bunun üzerine cached updates olayına baktım false , request live diye bir özelliği yok zaten
exec,refresh yapıtğımda
- db'ye kayıt işleniyor. db controllerde prior ve next ile ilgili kaydı görebiliyorum. fakat function'dan dönen result'ı alamıyorum zira execsql result döndürmüyor.
bunun üzerine önce exec sonra open yapayım dedim. open ile result geldi exec ile db'ye kayıt işlendi fakat db controllere baktığımda aynı kayıttan 2 tane olduğunu gördüm.
transaction'ın isolation level'ını none yaptığım vakit open ile result alıyorum db'ye kayıt yapıyorum fakat bu seferde
Kod: Tümünü seç
if b='' then
return 2;
exit;
end if;
Nasıl bir çözüm önerirsiniz, delphi ortamından gerekli kontroller yapılarak işlem gerçekleştirilebilir fakat bunun db üzerinden halletmem gerekiyor. postgres için bir konfigurasyon parametresi de gerekiyor olabilir onuda araştırıyorum ....
Cevaplar için şimdiden teşekkürler..
Saygılar;
Note : fonksiyonda herhangibir hata yok. problem zeos bileşenleri ile ilgili. Vcl formuna yazacaktım fakat burası daha uygun gibi geldi gerekirse taşınır..