Jeg sidder lige og leger lidt med at bruge begin og end for at kunne
undo'e ændringer i min postgresql database.
Jeg arbejder med en tabel, der indeholder nogle tal, fx
id(unique) | text
-------------------
12 | ligegyldig
13 | tekst i
14 | hver post
Jeg har lavet et web-interface, der kan vise sammenhængende tal i én
linje, og jeg gad godt kunne opdatere tabellen ved i mit interface at
vælge start og slutnummer.
Jeg har forsøgt en løsning, hvor jeg ved hver opdatering sletter de
eksisterende poster og indsætter på ny (jeg indsætter altså poster
magen til dem, jeg lige har slettet, hvis talrækken overlapper)
Jeg kunne godt tænke mig, at hvis noget gik galt under proceduren,
kunne jeg rollback'e til udgangspunktet. Mit forsøg er i pseudokode:
udfør #begin;#
for alle $sletID
udfør #delete from tbl_tabel where id=$sletID;#
hvis fejl udfør #rollback;#
for alle $indsaetID
udfør #insert into tbl_tabel values ($indsaetID,'en_tekst')#
hvis fejl udfør #rollback;#
hvis ingen fejl udfør #end;#
Det går galt, hvis nogle af $indsaetID'erne er samme som $sletID'erne.
Hvis jeg udfører en "END;" efter at have slettet poster, så kan jeg da
ikke få dem tilbage igen (hvis inserts'ene fejler), vel?
Håber I forstår hvor jeg vil hen, og kan give et skub.
Tak,
--
Morten
Red meat is NOT bad for you.
Now, blue-green meat, that's REALLY BAD for you.
|