Insert ID

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


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 :-)

> 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.
 
 Dalsi moznosti je, aby prikaz INSERT vracel podobne jako SELECT data,
 ktera se ulozila. Todle ale asi neni temer u zadne DB implementovane. 
 Mam pocit, ze se o to nekdo pokousi u PostgreSQL.

> Varianta 2)
> Nerobit trigger na insert ale nechat to na insertujucu aplikaciu, ktora 
> musi pre kazdy insert zavolat SEQ_A.NEXTVAL, zapamatat si tuto hodnotu v 
> aplikacii , pouzit ju na insert do A a po case ju pouzit i pre insert 
> pre B. Robi to tusim jedno vlakno, tak nieje velky problem, aby si 
> pamatalo posledny rozpracovany insert.
> (no je to take divne)

 Toto je celkem bezne. Nedrive vygenerovat ID a pak pouzivat.

    Karel

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


Další informace o konferenci Databases