Generell ist das MySQL-Universum in der letzten Zeit unübersichtlich geworden. Die unterschiedlichen Forks (Oracle, MariaDB, Percona, ...) entwickeln sich teilweise in verschiedene Richtungen bzw. positionieren sich heterogen im Markt. MariaDB bemüht sich dabei auch offensichtlich um die klassischen Oracle-Datenbank-Kunden. Mit der Version MariaDB 10.3 wurde unter anderem ein Subset der Sprache PL/SQL implementiert.
Im Folgenden soll kurz in einer Art Selbstversuch gezeigt werden, welche Schritte notwendig sind, um PL/SQL-Code in einer MariaDB (hier schon in der Version 10.4.11) zu nutzen.
Let's talk PL/SQL
Nach der Installation einer MariaDB (z.B. über fertige Docker Images (https://hub.docker.com/_/mariadb) muss die Datenbank für die Verwendung von PL/SQL konfiguriert werden: Translate this! - Oracle 19 in MariaDB migieren
Von diesem Ergebnis motiviert wagen wir den nächsten Schritt. Nun sollen Elemente des Schemas "hr" aus einer Oracle 19 Datenbank in die MariaDB migriert werden:
- sieben Tabellen
- eine View
- zwei Prozeduren
- drei Sequenzen
Die Objekte werden mit Originalnamen und -schreibweise (case-sensitive) auf der MariaDB erzeugt. In unserem Fall sind daher alle Objektnamen in Großbuchstaben erstellt worden. Dies kann aber auf Seiten der MariaDB z.B. über den Parameter (lower_case_table_names) in der Anwendung korrigiert werden.
Nach wenigen Sekunden ist das Datenmodell übertragen. Trotzdem sollte man das Ergebnis kontrollieren:
Alle Tabellen, Views und Sequenzen wurden erfolgreich migriert. Doch was ist mit den Prozeduren? Auch hier ist also alles im grünen Bereich.PL/SQL for runaways?
Zeit für einen kleinen Test. Dazu müssen zunächst aber noch ein paar Daten angelegt werden. Wie bereits erwähnt, wurden ja nur die Strukturen (also z.B. leere Tabellen) und nicht die Daten konvertiert. Mittels der Prozedur wird, z.B. im Rahmen einer Beförderung, Versetzung oder Kündigung protokolliert, welcher Mitarbeiter wann welche Position in der Firma innehatte. Der Code der Prozedur ist der folgende (aus den Oracle SQL-Dateien): Nun versuchen wir diesen Code aufzurufen, um den Eintrag des Mitarbeiters #1 (Matthias Jung) in die Tabelle "JOB_HISTORY" zu protokollieren. Dazu deklarieren wir uns über ein SQL-Statement die Variablen @ID und @DATE und nutzen diese beim Aufruf der Prozedur: Die Prozedur läuft einwandfrei.So far, so good ;-)
Hiermit soll unser kleiner Test abgeschlossen sein. Natürlich wird es nicht ohne weiteres problemlos möglich sein, komplexe PL/SQL-Datenbanken/Applikationen einfach auf MariaDB zu portieren. Unter anderem fehlen alle per default ausgelieferten Packages einer Oracle DB (z.B. dbms_output). Aber auch hier gibt es die ersten aktiven Entwickler, die damit beginnen, diese Pakete für MySQL nachzuimplementieren.
Trotzdem ist es spannend zu sehen, dass es Bemühungen gibt, den Wechsel von Oracle in die OpenSource-Welt noch weiter zu vereinfachen.
Weitere Hinweise zu PL/SQL in MariaDB finden Sie unter:
https://mariadb.com/kb/en/sql_modeoracle-from-mariadb-103/
Seminarempfehlung
Sie haben Interesse an einer Weiterbildung oder Fragen zu diesem Thema? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren MySQL-Seminaren