Der_Lampe Geschrieben 24. November 2010 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brabax Geschrieben 24. November 2010 Teilen Geschrieben 24. November 2010 Kannst du "seq_test.nextval" testweise ausgeben lassen? lG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
emetiel Geschrieben 24. November 2010 Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der_Lampe Geschrieben 24. November 2010 Autor Teilen 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 24. November 2010 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der_Lampe Geschrieben 24. November 2010 Autor Teilen Geschrieben 24. November 2010 ok danke schön für das entfernen dieses komischen Brettes das ich anscheinend vorm Kopf hatte Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.