Sie haben viel Arbeit vor sich!
Zwischen DB2 und Oracle gibt es einige wichtige Unterschiede (nur eine willkürliche Aufzählung dessen, was mir einfällt):
Datentypen
- Anzahl Datentypen:DB2 hat viele weitere Standardtypen, wie zum Beispiel
SMALLINT
,INTEGER
,DOUBLE
usw. Diese sind in Oracle SQL nicht vorhanden (obwohl einige in PL/SQL vorhanden sind). Dies ist wichtig für DDL und für das Casting und einige andere Anwendungsfälle, wie z. B. die Korrektheit von Prädikaten - Datumsdatentypen:Oracles einziger Unterschied zwischen
DATE
undTIMESTAMP
ist die Tatsache, dassTIMESTAMP
hat Mikrosekunden. AberDATE
kann auch Zeitinformationen enthalten. In DB2DATE
hat keine Zeitangabe, glaube ich. - Zeichendatentypen:Lesen Sie mehr über den Unterschied zwischen
VARCHAR
undVARCHAR2
in Oracle NULL
. In OracleNULL
ist viel allgemeiner als in DB2. Vor DB2 v9.7 mussten SieNULL
umwandeln zu jedem expliziten Typ, z.cast(null as integer)
. Das ist in Oracle nicht nötig.
Systemobjekte
SYSIBM.DUAL
wird einfach zuDUAL
- Funktionen:Sie sind alle ein bisschen anders. Musst du im Einzelfall prüfen. Beispiel:
LOCATE
wird zuINSTR
Syntax
TRUNCATE IMMEDIATE
wird zuTRUNCATE
EXCEPT
wird zuMINUS
- DB2's
FETCH FIRST n ROWS ONLY
:Es gibt keine solche Klausel in Oracle. Sie müssenROWNUM
verwenden oderROW_NUMBER() OVER()
Filtern (siehe dieses Beispiel ). ) - DB2s
MERGE
-Anweisung ist leistungsfähiger als die von Oracle, falls Sie diese verwenden. - DB2 unterstützt
INSERT INTO .. (..) VALUES (..), (..), (..)
. Bei Oracle müssten SieINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
schreiben
Erweitert
- Wenn Sie gespeicherte Prozeduren verwenden, funktionieren sie etwas anders, insbesondere bei fortgeschrittenen Datentypen, aber das geht hier nicht in den Rahmen.
Der effizienteste Versuch, dies zu erreichen, besteht möglicherweise darin, eine Art SQL-Abstraktion zu verwenden. Wenn Sie Java verwenden, würde ich empfehlen, dass Sie Ihre SQL-Anweisungen mit jOOQ umschließen (Disclaimer:Ich arbeite für das Unternehmen hinter jOOQ). jOOQ bietet eine Abstraktion auf API-Ebene für alle oben genannten Fakten. Sehr viel SQL kann ohne Anpassung sowohl auf DB2 als auch auf Oracle ausgeführt werden. Wir arbeiten auch an einem unabhängigeren Übersetzerprodukt:https://www.jooq.org/translate
Auf einer höheren Abstraktionsebene Hibernate (oder andere JPA-Implementierungen) können dasselbe für Sie tun