Der_Lampe Geschrieben 24. November 2010 Geschrieben 24. November 2010 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
Brabax Geschrieben 24. November 2010 Geschrieben 24. November 2010 Kannst du "seq_test.nextval" testweise ausgeben lassen? lG
emetiel Geschrieben 24. November 2010 Geschrieben 24. November 2010 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;
Der_Lampe Geschrieben 24. November 2010 Autor Geschrieben 24. November 2010 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 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!
Argbeil Geschrieben 24. November 2010 Geschrieben 24. November 2010 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.
Der_Lampe Geschrieben 24. November 2010 Autor Geschrieben 24. November 2010 ok danke schön für das entfernen dieses komischen Brettes das ich anscheinend vorm Kopf hatte
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden