ADODB mysql - oracle inserts

südpol

Erfahrenes Mitglied
Hi,

ich habe gerade ein kleines Projekt angefangen für welches ich gerne den Datenbank Abstraktionslayer ADODB verwenden möchte da die Anwendung u. U. auf Oracle portiert werden muss.

Jetzt stehe ich jedoch vor einem kleinen Problem für das ich noch keine Lösung finden konnte:

MYSQL bietet im Gegensatz zu Oracle diese Nette Funktion Felder automatisch mit Werten zu füllen (autoincrement). In Oracle verwendet man dafür Sequenzen. Wie habt ihr in euren Anwendungen die Portierbarkeit sichergestellt? Funktionen wie "Insert_ID()" funktionieren ja mit Oracle nicht mehr :-(

Ich hätte auch nichts dagegen sequenzen zu emulieren - leider habe ich dafür noch keine ADODB Funktion gefunden...

Gruß
 
Hi,

wer lesen kann ist klar im Vorteil. Im manual zu ADODB habe ich denke ich die Antwort auf meine Fragen gefunden. Die Funktionen CreateSequence() und GenID() sind wohl meine Freunde...

Liebe Grüße
 
Ich hätte auch nichts dagegen sequenzen zu emulieren - leider habe ich dafür noch keine ADODB Funktion gefunden...

Sequenzen in Oracle sind eine tolle Sache und vor allem sehr performant. Man sollte auf keinen Fall versuchen sie mit einer Hilfstabelle oder gar einen "SELECT MAX()+1" zu ersetzen.

Eine Möglichkeit das ganze transparent für die Applikation zu machen, (auto_increment) wenn du`s so willst, wäre mit einem BEFORE INSERT Trigger den :new Wert der entsprechenden Spalte einfach mit dem nächsten Wert einer Sequenz zu füllen. Beim INSERT kannst du dann ruhig ein NULL o.ä. reinschreiben, wird ja automatisch ersetzt.
 
Sequenzen in Oracle sind eine tolle Sache und vor allem sehr performant. Man sollte auf keinen Fall versuchen sie mit einer Hilfstabelle oder gar einen "SELECT MAX()+1" zu ersetzen.

Eine Möglichkeit das ganze transparent für die Applikation zu machen, (auto_increment) wenn du`s so willst, wäre mit einem BEFORE INSERT Trigger den :new Wert der entsprechenden Spalte einfach mit dem nächsten Wert einer Sequenz zu füllen. Beim INSERT kannst du dann ruhig ein NULL o.ä. reinschreiben, wird ja automatisch ersetzt.

Hi,

Danke für die Antwort. Da ich auf mysql nur entwickle bzw. schwach frequentierte Anwendungen betreiben werde ich denke ich einfach die ADODB Funktionen direkt übernehmen. In Oracle werden hier wohl richtige Sequenzen verwendet. In meiner aktuellen mysql Version wurden für jede Sequenz eine Tabelle angelegt. Ich glaube zwar, dass neuere mysql Versionen auch sequenzen können (oder war das ne Beta?) aber da die performance aktuell Nebensache ist kann ich auch mit der Lösung leben.

Liebe Grüße
 
Zurück