PDA

View Full Version : SQL - Update mit neuer Sequenznummer ROW_NUMBER()



roman
14-02-14, 13:44
Hallo zusammen

Ich habe die Anforderung, basierend auf einem bestimmten Kriterium eine Datei neu zu sortieren und neue Sequenznummern zuzuteilen.

Dies geht z.B. mit folgendem SQL wenn ich ein neues File erstelle, geordnet nach MELDID:

Select Row_Number() Over(ORDER BY Meldid desc ) as SEQNU, MELDID
From lib/file

Kann mir jemand sagen, wie der SQL-Befehl aussehen müsste, wenn ich ein bestehendes File enthaltend das Feld SEQNU updaten kann.

Gibt es ev. die Möglichkeit dem Befehl "mitzuteilen", ab einer bestimmten SEQNU (z.B. 50000) zu nummerieren.
Kann leider auch mit Google nichts Hilfreiches dazu finden.

Vielen Dank schon mal für eure Antworten
Grüsse Roman

Fuerchau
14-02-14, 13:53
Row_Number() ist ja nur eine temporäre Nummer.
Du kannst per "create sequence" einen "Generator" mit einem Startwert erstellen und per "next value for mysequence" den Wert hochzählen lassen.
Allerdings gibts beim Update keinen Order by, so dass die Zuweisung der Nummer vom gewählten Index der "Update ... Where"-Bedingung abhängt.

BenderD
14-02-14, 14:10
... selbst wenn das mit dem Index klappen würde, könnte das bei jeder Asuführung wieder anders sein. Was immer geht, ist zweistufig: 1. erstellen Zwischendatei, 2. update aus der Zwischendatei.

D*B

roman
14-02-14, 14:53
Besten Dank Baldur (natürlich auch BenderD)

Der Hinweis von Baldur hat geholfen.
Hier noch zur Ergänzung meine verwendete Befehlsfolge.
Das zu Grunde liegende File habe ich vorgängig bereits in die benötigte REihenfolge gebracht:

create sequence lib/reihe start with 73082 increment by 1
Sequenz REIHE wurde in LIB erstellt.

update qtemp/gcpca set SEQNU = NEXT VALUE FOR reihe
44 Zeilen in GCPCA in QTEMP aktualisiert.

anschliessend Sequence wieder löschen:
drop sequence LIB/Reihe
Löschen von REIHE in LIB beendet.

Grüsse Roman