From: | "Adnan DURSUN" <a_dursun(at)hotmail(dot)com> |
---|---|
To: | "acemi nix" <aceminix(at)gmail(dot)com> |
Cc: | <pgsql-tr-genel(at)postgresql(dot)org> |
Subject: | Re: [pgsql-tr-genel] Re: oid hakkında |
Date: | 2006-02-28 22:46:45 |
Message-ID: | BAY106-DAV1055614B823685E9771A85FAF70@phx.gbl |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
>----- Original Message -----
>From: acemi nix
>To: Adnan DURSUN
>Sent: Wednesday, March 01, 2006 12:22 AM
>Subject: Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] Re: oid hakkında
>On 3/1/06, Adnan DURSUN <a_dursun(at)hotmail(dot)com> wrote:
>Kural 1 : "sequence" nesnelerinden ardışık değerler elde etmenin garantisi yoktur. Çünkü bu nesneler "transaction" dan etkilenmez
> (Bu doğaldır ve böyle olması gerekir) Eğer sıralı değerler istiyorsanız uygulamaya özel çözümler bulun.
>ardışık olması umrumda değil tekil olması yeterli :)
>benim tek derdim doğru değeri geri döndürebilmek.
>pg_query($conn,"BEGIN; INSERT INTO....;SELECT LASTVAL(); END;"); o transactiondakini döndürdükten sonra benim için hiç bi problem yok. sanırım yarın bunu >değişik bi uygulama ile deniycem.
Eğer sizin amacınız tabloya kayıt ekleyip, onun PK değerini elde etmek ise, bunun en hızlı ve kolay yolu veritabanında bir
fonksiyon oluşturmaktır. Fonksiyonun akışı şu şekilde olsun ;
1. "sequence" den değeri alın
2. INSERT INTO... çalıştırın
3. "sequence" den aldığınız değeri geri döndürün.
Alın size bir örnek :
CREATE OR REPLACE FUNCTION pr_kayit_ekle(arg1 varchar,arg2 varchar, arg3 date...) RETURNS
int4 $$
DECLARE
V_SIRA_DEGERI INT4;
BEGIN
V_SIRA_DEGERI := nextval('<sequence>');
INSERT INTO tablo1 values(V_SIRA_DEGERI,arg1,arg2,arg3,....);
INSERT INTO tablo2 values(V_SIRA_DEGERI,arg1,arg2,arg3,...);
RETURN (V_SIRA_DEGERI);
END;
$$ LANGUAGE plpgsql;
PHP tarafında :
pg_query($conn,"SELECT pr_kayit_ekle('$arg1','$arg2','$arg3')");
böylece hem veritabanına tek bir çağrı yapmış olacaksınız (performans)
ve hem de, geriye "sequence" değerini almış olacaksınız..
Ama unutmayınız, bu fonksiyon başarısız olsa bile "sequence" ınızın değeri 1 artırılacaktır.
bundan daha iyi ve tazesiniz bulamazsınız :-)
İyi Çalışmalar
Adnan DURSUN
ASRIN Bilişim Ltd.
From | Date | Subject | |
---|---|---|---|
Next Message | Adnan DURSUN | 2006-02-28 22:54:52 | Re: [pgsql-tr-genel] Re: oid hakkında |
Previous Message | Devrim GUNDUZ | 2006-02-28 22:22:15 | Re: Oracle'dan PostgreSQL'e |