Re: [pgsql-tr-genel] Re: oid hakkında

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.

In response to

Responses

Browse pgsql-tr-genel by date

  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