Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Autoincrement Sequence beim löschen eines Datensatzes verringern

Empfohlene Antworten

Veröffentlicht

Moin moin

hab ein Problem mit unserer Oracle Datenbank, ich habe mir eine Sequence geschrieben

create sequence seq_test 

start with 1 

increment by 1 

nomaxvalue; 
mit dieser sequence erhöhe ich meine ID um 1 wenn ich einen neuen Datensatz in die Tabelle einfüge mit:
insert into table (ID, x, y, z) values (seq_test.nextval, x, y, z)

wenn ich einen Datensatz aus der Tabelle entferne wird die Sequence allerdings nicht verringert => beim erneuten Einfügen eines Datensatzes stimmt die ID nicht mehr.

weiß da jemand eine Lösung?

MfG

Kannst du "seq_test.nextval" testweise ausgeben lassen?

lG

Warum möchtest Du denn beim Löschen die Sequence zurückzählen? Ist es denn so, dass Du ausschließen kannst, dass einmal nicht der letzte Datensatz gelöscht wird? Sollte nämlich ein anderer als dieser gelöscht werden, Du die Sequence eins zurückdrehen, passt Dein nächster insert nicht mehr und Du bekommst ein dup_val_on_index

Ansonsten

alter sequence blablub INCREMENT BY -1;

nächste zahl wählen

alter sequence blablub INCREMENT BY 1;

Ist es denn so, dass Du ausschließen kannst, dass einmal nicht der letzte Datensatz gelöscht wird? Sollte nämlich ein anderer als dieser gelöscht werden, Du die Sequence eins zurückdrehen, passt Dein nächster insert nicht mehr und Du bekommst ein dup_val_on_index

auch wieder wahr :upps ich glaub ich hatte mich da gerade etwas festgefahren :rolleyes: werds wohl einfach so lassen die id muss ja nicht fortlaufend sein...und an sowas denk ich net :upps und ich grübel derb lang wie ich das lösen kann :confused:

@brabax: seq.test.nextval erhöht den Zähler der Sequence und gibt ihn aus

danke für die schnelle Antwort euch beiden! ;)

Um genau zu sein DARF in diesem Fall die ID auch nicht fortlaufend sein. Die ID ist die Identität deines Datensatzes, wenn du den Satz löscht darf ein anderer nicht die gleiche ID bekommen weil die Identität über den Zeitraum nicht mehr eindeutig wäre. Das erzeugt Probleme z.b. bei Paging in Anwendungen. Häufig referenzieren Anwendungen DataRows nur über ihre ID. Ein späteres UPDATE WHERE ID = ... könnte dir deinen neuen Datensatz verändern obwohl der alte gemeint war.

ok danke schön für das entfernen dieses komischen Brettes das ich anscheinend vorm Kopf hatte :D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.