nxclass
Goto Top

SQL Migration von MySQL zu Oracle

Viele der Beispiele habe ich mir aus verschiedenen Quellen zusammen gesucht und angepasst.


back-to-topLeere Zeichenketten werden zu NULL

In Oracle werden leere Zeichenketten als NULL gespeichert bzw interpretiert. Dies hat unmittelbar Auswirkungen auf Sortierungen und auch das Tabellen Schema selbst.

back-to-topSortierung bei leeren Zeichenketten
Während in MySQL eine leere Zeichenkette bei einem Sortiervorgang als kleinstes Ergebniss zurück gegeben wird, existiert dieser Datensatz in Oracle nur als NULL und wird als letztes zurück gegeben.
ist eine mögliche Lösung

back-to-topErgebnis Menge einschränken - LIMIT

Oracle kennt das LIMIT nicht, hat dafür aber das ROWNUM Token. Dabei ist aber zu beachten, das dies nur eingeschränkt nutzbar ist.

back-to-topeinfach Menge einschränken
einfacher Ersatz für LIMIT 10

back-to-topMengen Bereiche abfragen
Ersatz für LIMIT 10,5

back-to-topZeitstempel - UNIX Timestamps

Oracle besitzt zwar ein TIMESTAMP Datentyp, dieser ist aber nicht unmittelbar kompatibel mit dem Integer Wert aus der MySQL DB.

back-to-topCONVERT_TZ()
Diese Funktion ersetzt die unter MySQL bekannte Funktion CONVERT_TZ():

back-to-topFROM_UNIXTIME()
Diese Funktion ersetzt die unter MySQL bekannte Funktion FROM_UNIXTIME():

back-to-topUNIX_TIMESTAMP()
Diese Funktion ersetzt die unter MySQL bekannte Funktion UNIX_TIMESTAMP():

back-to-topGruppierungen in Abfragen

Oracle ist nicht so tolerant wie MySQL und duldet es nicht wenn in SELECT Felder verwendet werden, die weder in GROUP BY verwendet noch in einer Agregat Funktion stehen.

back-to-topErsatz für "erstes Element der Gruppe"
Dies ist das Standard Verhalten von MySQL wenn ein Feld weder gruppiert werden soll, noch in einer Aggregat Funktion steht. Um das Erste Element bei einer Gruppierung zu erhalten hilft diese Funktion:

back-to-topErsatz für GROUP_CONCAT()
Diese Funktion ersetzt die unter MySQL bekannte Aggregat Funktion GROUP_CONCAT():

back-to-topAnwendung der neuen Aggregat Funktionen
Um die zuvor genannten Funktionen nutzen zu können, wird noch ein Tabellen Datentyp benötigt um die zu gruppierenden Daten auf zu nehmen.

Jetzt kann man die Funktionen compilieren und verwenden.

back-to-topAuto Increments

Auto Increments werden über Sequenzen realisiert.
Der INSERT Trigger im Beispiel Code, beinhaltet die IF Abfrage um eine Rückgabe der LAST_INSERT_ID zu realisieren.

back-to-topLast Insert ID
Beispiel:
die :LAST_INSTERT_ID ist ein SQL Parameter und kann so abgefragt werden.

back-to-topSchlusswort

Dies sollte alles nur als "Notlösung" betrachtet werden um ein möglichst schnellen Umzug zu erlauben. Man sollte immer versuchen seine Anwendung auf die jeweilige Datenbank zu optimieren und nicht die Datenbank an die Anwendung anzupassen.

Content-Key: 185730

Url: https://administrator.de/contentid/185730

Printed on: March 27, 2023 at 14:03 o'clock