ipu Geschrieben 17. Mai 2005 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
robotto7831a Geschrieben 17. Mai 2005 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
Amstelchen Geschrieben 17. Mai 2005 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
robotto7831a Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 trigger bekommen ihre werte von sequenzen. Nicht umbedingt. Frank
Amstelchen Geschrieben 17. Mai 2005 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
ipu Geschrieben 17. Mai 2005 Autor 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:
robotto7831a Geschrieben 17. Mai 2005 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
robotto7831a Geschrieben 17. Mai 2005 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
The_red_one Geschrieben 17. Mai 2005 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
ipu Geschrieben 18. Mai 2005 Autor 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
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