Ich arbeite zur Zeit an einer Bücherverwaltung (um mich an BSPs ranzutasten) und die Suche nach Büchern von bestimmten Autoren funktioniert einwandfrei.
Nun will ich aber eine Option einbauen die es erlaubt ein Buch (inkl. ISBN, Autor, Titel) neu in meiner Datenbanktabelle anzulegen.
Funktioniert soweit auch ganz gut.
Mein Problem jetzt ist, das ich als Tabellenschlüssel eine 'ID' habe und diese darf nur einmal in meinem Datensatz vorkommen, also brauch jeder Eintrag eine andere 'ID'.
Habe im Internet nun die Funktion 'NUMBER_GET_NEXT' gefunden aber verstehe die Funktion nicht ganz, habe bis jetzt nur spärlich erklärte Anleitungen dazu gefunden.
Außerdem habe ich jetzt eine bereits vorhandene Number-Range verwendet die jetzt aber bei IDs von 0000060001 anfängt anstatt bei 0000000001 anfängt. Daher wollte ich mir meine eigene machen aber da verstehe ich leider noch weniger was von mir gefragt ist.
Vielleicht kann mir jemand Tipps geben oder hat ein aufschlussreiches Tutorial bei der Hand.
warum suchst du dir nicht die zuletzt angelegte ID (z.b. tabelle lesen und absteigend sortieren -> erster Eintrag = höchste ID ) und zählst da 1 dazu? Ich geb zu, es ist nicht die perfomanteste Lösung, gerade Hinblick auf die Menge an Daten die so eine Datenbanktabelle mal haben kann. Aber ich glaube für deine Übungszwecke könnte dir das genügen.
Ok danke werd mich gleich dranmachen das zu probieren.
Kleine Frage nebenbei, habe mir bereits überlegt den Schlüssel meiner Tabelle auf die ISBN der Bücher zu setzen, denn diese ist ja für jedes Buch einmalig.
Nur dann müsste ich immer überprüfen ob diese nicht bereits in meiner Tabelle vergeben ist und bin mir nicht sicher ob das ab einer gewissen Tabellen größe Performancemäßig noch vertretbar ist, bzw. fallen mir spontan nur recht simple und aufwendige Wege ein das zu testen. Sprich die neue ISBN mit jedem Tabelleneintrag abzugleichen.
Wenn die ISBN dein Schlüsselfeld ist, dann geht das ziemlich fix. Schlüsselfelder von Datenbanktabellen werden in extra Tabellen gespeichert, so dass das System schnell große Datenbanken durchforsten kann. Wenn du z.b. nach EBELN in der EKKO suchst geht das schnell, suchst du nach z.B. WAERS dauert das richtig lange, weil dann jeder Tabelleneintrag einzeln gelesen wird.
Deine Abfrage kannst du gezielt mit SELECT SINGLE * FROM dbtabelle INTO ls_struktur WHERE isbn = lv_isbn steuern und erhälst schnell deine Antwort, denn wenn da ein sy-subrc <> 0 rauskommt, gibt es den Eintrag noch nicht.
Ah alles klar, danke dir Thanatos sehr hilfreich die Info, dann schau ich mal ob ich die ISBN nicht einfach als schlüssel verwende.
Eine Frage vielleicht noch wenn ich darf, man kann ja auch mehrere Schlüssel in einer Tabelle haben bzw. diese verknüpfen wenn ich das richtig verstanden habe. Wie funktioniert das dann ? Werden diese dann separat betrachtet und man verwendet den Schlüssel den man gerade hat oder sind die in irgendeiner Form abhängig voneinander ?
mehrere Schlüssel verwendet man dann wenn man mehrere Ober- und Unterkategorien hat. Also z.B. für einen Autohändler:
erster Schlüssel wäre 'VW'
zweiter Schlüssel dann 'GOLF' 'PASSAT' usw.
dritter Schlüssel z.B. das Ausstattungspaket 'COMFORT' 'DE LUXE' usw.
Dann kannst Du entweder mit allen Schlüsseln lesen wenn Du den VW GOLF DE LUXE willst, oder Du sagst gib mir mal alle VWs zurück die in der Datenbank gespeichert sind.