Hallo,
the following xquery results in duplicate keys or missed updates, if
we get two messages of the same person in one xml-document. All
updates in the database are done at the end of the xquery and the
reading inbetween gets the old state of the database. Is there a
command to persist the actual state (like commit in sql)? If not, i
need some help for my design, because i have no idea, how to get a
stable processing.
Kind regards,
Christoph
(: Verarbeitung einer Bestandslieferung (1600).
:)
declare namespace xmeld="http://www.osci.de/xmeld21";
declare namespace kmeld="http://www.krz-swd.de/kmeld";
import module namespace kmeldFkt="http://www.krz-swd.de/kmeld/Fkt"
at "kmeldFkt.xq";
declare variable $file :=
"/home/christoph/Beruf/KRZ/Referenznachrichten/16.001.001.001a-1600.xml";
for $s in
doc($file)/xmeld:kirche.bestandslieferung.1600/xmeld:sachzusammenhang,
$k in
$s/xmeld:initialGeliefertesKirchenmitglied/xmeld:kirchenmitglied
let $n := $s/preceding-sibling::xmeld:nachrichtenkopf,
$key := kmeldFkt:bildeIdMitglied($n, $k),
$m_alt := (: Mitglied im Bestand :)
collection("XMeldDB")/kmeld:XMeldDB/kmeld:personenbestand/kmeld:Mitglied[@ID
eq $key]
let $m_neu :=
if ($m_alt)
then
kmeldFkt:updateMitglied($m_alt, $k, $s, $n)
else
kmeldFkt:createMitglied($k, $s, $n)
return
if($m_alt)
then
replace node $m_alt with $m_neu
else
insert node $m_neu into
collection("XMeldDB")/kmeld:XMeldDB/kmeld:personenbestand