Db2 LUW spricht Oracle-Dialekt
PL/SQL als Datenbankprogrammiersprache für Oracle-Datenbanken ist weit verbreitet. Die Tatsache, dass PL/SQL auch in einer IBM Db2 LUW-Datenbank verwendet werden kann, ist dagegen eher unbekannt. In diesem Artikel wird aufgezeigt, wie in einer Db2-Datenbank die Nutzung der prozeduralen SQL-Erweiterung (PL/SQL) als auch des Oracle SQL-Dialektes aktiviert werden kann und welche Besonderheiten vor allem im Vergleich zu Oracle zu beachten sind.
Warum Oracle-Dialekt in einer Db2?
Ein von den Hauptgründen, warum IBM den Oracle-Dialekt, in einer Db2 nachimplementiert hat, ist natürlich die Erleichterung bei der Migration von einer Oracle in eine Db2-Datenbank. Bestehende Oracle PL/SQL-Programme können ohne große Anpassungen in eine Db2 übernommen werden. Der Schulungsaufwand der Datenbankentwickler beim Datenbankwechsel ist damit auch deutlich geringer, da bestehende Entwickler-Skills weiter genutzt werden können. Darüber hinaus stellt dieses Feature eine Erleichterung bei der Implementierung von Datenbankanwendungen, die Datenbanken mehrere Hersteller unterstützen sollen. Neben Oracle unterstützt Db2 noch Sybase- und MySQL-Dialekte.
Ein weiterer nicht unwesentlicher Grund für die Aktivierung der Oracle-Kompatibilität ist die Tatsache, dass die Programmiersprache PL/SQL über deutlich größeren Befehls- und Sprachumfang verfügt als die proprietäre prozedurale Db2-Erweiterung SQL PL.
Voraussetzung für Oracle PL/SQL in Db2
Die Oracle-Kompatibilität in einer Db2-Datenbank kann über die DB2_COMPATIBILITY_VECTOR Registrierungsvariable aktiviert werden. Gültige Werte sind ORA für Oracle, SYB für Sybase, MYS für MySQL (siehe Abbildung 1). Durch die Aktivierung des Kompatibilitätsmodus werden bestimmte Funktionalitäten anderer Datenbankhersteller mit beinahe exakter Syntax unterstützt. Die DB2_COMPATIBILITY_VECTOR Registrierungsvariable kann aber auch so eingestellt werden, dass nur bestimmte Datenbank-Funktionalitäten der anderen Datenbankhersteller aktiviert werden.
Native Unterstützung von Oracle SQL und PL/SQL in Db2
IBM hat die Oracle SQL- und PL/SQL-Funktionalitäten auf dem untersten Level des Datenbankkernels implementiert. Das bedeutet, dass die Ausführung von PL/SQL in Db2 ohne eine Emulationsschicht stattfindet. Die Performance von PL/SQL ist daher vergleichbar mit der Performance der Db2 eigenen SQL PL prozeduralen Erweiterung.
Funktionsumfang von Oracle SQL- und PL/SQL in Db2
Im Oracle-Kompatibilitätsmodus unterstützt Db2 zusätzlich zum ANSI SQL auch noch die Oracle-native Syntax. Dazu zählen unter anderem das Plus-Zeichen (+) für den Outer-Join, ROWNUM-Pseudospalte für die Nummerierung der Einträge als auch der MINUS-SQL-Operator für die Differenzbildung zwischen Ergebnismengen.
Im PL/SQL-Bereich kann beinahe der volle Sprachumfang in einer Db2-Datenbank verwendet werden. Einschränkungen gibt es, wie zu erwarten, bei den Oracle Standard-Packages. IBM stellt in der Db2 nur eine sehr kleine Anzahl an PL/SQL-Standard-Packages zur Verfügung. Die Abbildung 2 stellt einige Basis-Packages dar, die in einer Db2-Datenbank verfügbar sind.
Unterschiede PL/SQL zwischen Oracle und Db2
Im Gegenteil zu Oracle besteht in Db2 die Möglichkeit, einen sogenannten Schema-Suchpfad für Datenbankobjekte zu definieren. Der Schema-Suchpfad wird in einer Datenbanksession mithilfe des „SET PATH“-Befehls gesetzt. Dieser Suchpfad ist mit dem Datei-Suchpfad auf der Betriebssystemebene vergleichbar und erleichtert das Referenzieren von Datenbankobjekten, die sich in einem anderen Schema befinden. Da zum Beispiel die Oracle Standard-Packages in der Db2 im „SYSIBMADM“ Schema installiert sind, muss der Schema-Suchpfad mit diesem Schema konfiguriert sein, damit die Standard-Package-Funktionalität genutzt werden kann (siehe Abbildung 3).
Darüber hinaus besteht in Db2, im Gegenteil zu Oracle, die Möglichkeit einen Parameter oder Rückgabewert einer Funktion mit Längenangabe zu begrenzen (siehe Abbildung 4).
Tools
Im Bereich der Tools verfügt Db2 über einen SQLPlus-kompatiblen Befehlszeileninterpreter mit dem Namen CLPPlus. Die CLPPlus-Funktionalität ist mit dem Oracle SQLPlus vergleichbar. Es werden alle gängigen SQLPlus-kompatiblen Befehlsoptionen wie Variablen-Substitution, Spaltenformatierung, Reporting-Funktionen und Kontrollvariablen unterstützt.
Als grafische Entwicklungsoberfläche kann, z. B. der im Oracle-Umfeld weit verbreitete, SQLDeveloper genutzt werden. Um den SQLDeveloper mit einer Db2-Datenbank zu verbinden, werden die JDBC-Db2-Treiber benötigt. Diese müssen im SQLDeveloper unter Tools/Voreinstellungen als JDBC-Treiber eines anderen Herstellers eingebunden werden. Anschließend kann dann in gewohnter Weise eine Verbindung mit einer Datenbank eingerichtet werden. Dabei ist der Datenbanktyp Db2 auszuwählen. (siehe Abbildung 5).
Fazit
Mit der Oracle-Kompatibilität für SQL- und PL/SQL-Syntax hat IBM die Migration von Oracle in eine Db2-Datenbank deutlich erleichtert. Bestehende Oracle PL/SQL-Programme können, falls alle benötigten Funktionen in Db2 vorhanden sind, ohne großen Aufwand in eine Db2 Datenbank übernommen werden und der Schulungsaufwand der Datenbankentwickler kann auf ein Minimum reduziert werden.
Da es sich um eine native Implementierung der Oracle-Funktionalitäten handelt, gibt es bei der Nutzung der Oracle-Syntax keinen Performancenachteil im Vergleich zu der Db2-eigenen SQL PL prozeduralen Erweiterung. Da Oracle PL/SQL über deutlich größeren Sprachumfang verfügt als SQL PL, bietet sich es sogar an, Datenbankanwendungen in Db2 auch direkt in PL/SQL zu erstellen.
Seminarempfehlungen
ORACLE DATENBANKPROGRAMMIERUNG MIT PL/SQL GRUNDLAGEN DB-ORA-02
Zum SeminarIBM DB2 FÜR LINUX/UNIX/WINDOWS SQL GRUNDLAGEN DB-DB2-01
Zum SeminarPrincipal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare