Insert ID

Kluvanek Martin kluvanek na tesnet.cz
Pátek Červen 20 13:07:12 CEST 2003


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.
Najprv sa prideli generovany ID (PK) ktory sa pouzije v inserte pre 
zaznam z A a po kratkom case sa vyrobi  (insert) zaznam v B a cez ten ID 
sa musi spojit so zaznamom v A.
Problem: ako sa spravat k ID

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.
Tak by som si musel zaznam nejak dohladat podla poli s mnou definovanymi 
hodnotami (to sa mi nepaci ani trochu) a zistit tak ID ktory mam pouzit 
pre naviazanie noveho recordu v B.

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)

Najlepsie by bolo keby bolo mozne aby vo variante 1) mohol insert vratit 
hodnotu ID prave insertnuteho zaznamu.
Ale zatial nemam ziaden realizovatelny napad.
Iba ak cez trigger after insert si zapamatet v nejakom package objekte 
hodnotu posledneho ID v inserte.
Ale to by som zas musel zarucit, ze medzitym nikto iny ani ja sam 
neinzertnem ziaden dalsi zaznam...????

Pouzivam Oracle9i.

-- 
Martin Kluvanek
ved.odd. vyvoje (head of development department)
TES s.r.o
Testovani Energetickych Systemu (Testing of Energetical Systems)

Prazska 597
674 01 Trebic
Czech republic
tel:568 8384 28  (+420 5688384 28)
fax:568 8384 27  (+420 5688384 27)
homepage: http://www.tesnet.cz



Další informace o konferenci Databases