Insert ID

Karel Zak zakkr na zf.jcu.cz
Pátek Červen 20 13:59:38 CEST 2003


On Fri, Jun 20, 2003 at 01:35:14PM +0200, Kluvanek Martin wrote:
> Karel Zak wrote:
> >On Fri, Jun 20, 2003 at 01:07:12PM +0200, Kluvanek Martin wrote:
> >
> >>Karel Zak wrote:
> >>
> >>>>Tomu nejak nerozumim. Jak updatem dostanu to cislo do aplikace? Malokdy
> >>>
> >>>
> >>>Tady bylo mysleno, ze jednim update pridelite to poradove cislo
> >>>(vsimnete si nerikam PK). Pochopitelne do aplikace to musite dostat
> >>>selectem. Kazdopadne vse pekne bez zamku.
> >>
> >>Nedavno som riesil nieco podobne a dodnes neviem, ako sa k tomu spravne 
> >>filozoficky postavit.
> >>Mam 2 tabulky spojene k sebe relaciou s kardinalitou 1:1 (presnejsie 
> >>1:0:1 cize k jednemu zazznamu tabulky A moze existovat 0 az 1 zaznam 
> >>tabulky B a k zaznamu z B musi existovat prave jeden z A)
> >>Rozdelenie je dane technologiou vzniku dat, inak by to kludne mohlo byt 
> >>v 1 tabulke.
> >
> >
> >  IMHO je 1:1/0 uchylka :-)
> Preklep, malo to byt 1:0..1 ale pochopil ste to spravne.
> V com presne je to uchylne?

 Sam jste si odpovedel, 1:1 = jedna tabulka.

> >>Varianta 1)
> >>nechat ID generovat trigger na insert
> >>ale po inserte potrebujem zistit hodnotu pouziteho IDu ale tu neviem, 
> >>pretoze ju videl akurat ten trigger.
> >
> >
> > Nevim jak v Oracle, ale treba PostgreSQL vraci u INSERTu 'oid' (interni 
> > DB identifikator radku) do aplikace. Pak lze jednoduse udelat:
> >
> >    SELECT pk FROM tab WHERE oid=<x>
> >
> > Nedivil bych se pokud by neco takoveho slo i u Oracle.
> Tak nejak som si to povodne predstavova.
> Je tam nieco ako ROWID (ma to hodnoty napriklad AAABqDAAHAAAAAMAAA)
> Ale zatial som nebol schopny zistit, ci je mozne to vyrazit a ako ho 
> vyrazit rovno z insertu. Samozrejme v selekte uz potom pouzijem
> WHERE ROWID=blablaba
> Ako vypada ten insert v PostgreSQL?

 Ted nevim jaky myslite :-) Pokud ten co vraci vlozena data tak ten 
 _mozna_ nekdo teprve implementuje (a stejne by to bylo dost neprenosne).
 
 Pokud ten co vraci 'oid'. Tak je to normalni INSERT. PostgreSQL jako
 odpoved vraci do klietske knihovny oid a je tam funkce PQoidValue()
 kterou to cislo jde zjistit.

    Karel

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/


Další informace o konferenci Test