ipu Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 Hallo zusammen, in der Oracle-Welt bin ich total neu, weshalb ich mich vertrauensvoll an euer Fachwissen wende und darauf hoffe, das mir jemand weiterhelfen kann. - Wir haben eine Oracle-DB aufgesetzt und mit Testdaten gefüllt. In allen Tabellen wurde eine ID als PK eingerichtet. Ein Trigger sorgt dafür, dass die Zahl immer eins hochgezählt wird. Jetzt habe ich die Testdaten gelöscht und möchte die echten Daten aus der ACCESS-DB importieren. Gibt es eine Möglichkeit, die PK zurückzusetzten auf 0, so dass das importieren keine Probleme bereitet und der Trigger anschließend ab der aktuell höchsten ID weiterzählt und nicht bei der höchsten ID der Testdaten, die ja schon gelöscht sind? Also in ACCESS kann man das ja mit DB komprimieren und reparieren. Gruß, ipu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 Über einen Trigger? Naja das ist auch eine Möglichkeit. Wie ist der Trigger aufgbaut. Wo bekommt der Trigger die höchste ID her? Ich nehme mal an, dass er ein max auf die ID's in der Tabelle macht und so die höchste + 1 rausfindet. Wenn aber in der Tabelle nichts drin steht dann kann doch bei dem Trigger nur eine 1 rauskommen. Wie gesagt wenn er so arbeitet wie beschrieben. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 trigger bekommen ihre werte von sequenzen. deaktiviere die trigger beim import in die oracle und erstelle die sequenzen mit den entsprechenden anfangswerten neu. primärschlüssel haben bei oracle nichts mit hochzählen gemeinsam (sind also nicht zu verwechseln mit z.b. autowert in access) und können nicht "zurückgesetzt werden". s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 trigger bekommen ihre werte von sequenzen. Nicht umbedingt. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 richtig, nicht unbedingt, ist aber die sauberste und einfachste methode, würde ich meinen - wer will schon loops programmieren wenn man sequenzen start, minimum, maximum, increment by, und andere feinheiten ohne eine einzelne programmzeile beibringen kann. aber ich schweife ab. sorry. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ipu Geschrieben 17. Mai 2005 Autor Teilen Geschrieben 17. Mai 2005 Ehh..., ja. Vielen Dank erstmal. Aber was sind Sequenzen in Oracle? Und wo kann ich diese mit den Anfangswerte neu setzten? Hier ist der Trigger: CREATE OR REPLACE TRIGGER tumreg.TR_S_1774_1_PATIENT BEFORE INSERT ON tumreg.PATIENT FOR EACH ROW BEGIN SELECT tumreg.S_1774_1_PATIENT.nextval INTO :new.ID_PATIENT FROM dual; END; :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 Für ein simples Insert braucht man ja noch nicht mal einen Trigger. Man kann die Sequence ja auch direkt beim Insert mit einbauen. Aber Du hast recht. Wir schweifen ab. Der Threadersteller sollte jetzt erstmal antworten. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 CREATE OR REPLACE TRIGGER tumreg.TR_S_1774_1_PATIENT BEFORE INSERT ON tumreg.PATIENT FOR EACH ROW BEGIN SELECT tumreg.S_1774_1_PATIENT.nextval INTO :new.ID_PATIENT FROM dual; END; Du benutzt die Sequence S_1774_1_PATIENT in dem Trigger. Frank Edit: http://tahiti.oracle.com/pls/db901/db901.tabbed?section=79390 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The_red_one Geschrieben 17. Mai 2005 Teilen Geschrieben 17. Mai 2005 Das mit deinem Trigger ist voll in Ordnung. Künstliche PKs generiert man am besten über Trigger, die aus einer Sequence auslesen. Zurücksetzen kann man eine Sequence nicht. Einfach löschen und neu anlegen. Dann zählt sie wieder von vorne. Du musst halt defnieren was "vorne" heisst, ob sie bei 1 oder 2000 zu zählen beginnt, bestimmst du beim anlegen der Sequence. Genauso in welchen Zählschritten gezählt wird. Aber wenns nur ein künstlicher Schlüssel ist, ists doch egal... ob sie bei 1 oder 3864 zu zählen beginnt. Aber wenn du wieder "vorne" anfangen willst, dann löschen und neu anlegen. lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ipu Geschrieben 18. Mai 2005 Autor Teilen Geschrieben 18. Mai 2005 Guten Morgen zusammen, vielen Dank für eure vielen Tipps!! Das hilft mir schon weiter denke ich. Sonst meld ich mich nochmal. Ihr seid echt gut drauf! Nur schade, dass ich das Forum nicht schon früher entdeckt habe ... . Hätte mir viel Zeit und Mühe und Frust erspart! Schönen Tag noch, ipu 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.