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