Hai molto lavoro da fare!
Tra DB2 e Oracle, alcune differenze importanti sono (solo un'enumerazione arbitraria di ciò a cui riesco a pensare):
Tipi di dati
- Numero di tipi di dati:DB2 ha molti più tipi standard, come
SMALLINT
,INTEGER
,DOUBLE
, ecc. Quelli non esistono in Oracle SQL (sebbene alcuni esistano in PL/SQL). Questo è importante per DDL e per il casting e alcuni altri casi d'uso, come la correttezza dei predicati - Tipi di dati Data:l'unica differenza di Oracle tra
DATE
eTIMESTAMP
è il fatto cheTIMESTAMP
ha microsecondi. MaDATE
può contenere anche informazioni sull'ora. In DB2,DATE
non ha informazioni sull'ora, credo. - Tipi di dati del carattere:leggi la differenza tra
VARCHAR
eVARCHAR2
in Oracle NULL
. In Oracle,NULL
è molto più generale che in DB2. Prima di DB2 v9.7, dovevi eseguire il cast diNULL
a qualsiasi tipo esplicito, ad es.cast(null as integer)
. Non è necessario in Oracle.
Oggetti di sistema
SYSIBM.DUAL
diventa semplicementeDUAL
- Funzioni:sono tutte un po' diverse. Dovrai controllare caso per caso. Ad esempio,
LOCATE
diventaINSTR
Sintassi
TRUNCATE IMMEDIATE
diventaTRUNCATE
EXCEPT
diventaMINUS
-
FETCH FIRST n ROWS ONLY
:Non esiste tale clausola in Oracle. Dovrai usareROWNUM
oROW_NUMBER() OVER()
filtraggio (vedi questo esempio ) MERGE
di DB2 istruzione è più potente di quella di Oracle, nel caso in cui la usi.- DB2 supporta
INSERT INTO .. (..) VALUES (..), (..), (..)
. Con Oracle, dovresti scrivereINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avanzate
- Se utilizzi le procedure memorizzate, funzionano in modo leggermente diverso, specialmente con i tipi di dati avanzati coinvolti, ma qui non è ambito.
Il tuo colpo più efficiente in questo potrebbe essere usare l'astrazione SQL di qualche tipo. Se stai usando Java, ti consiglio di racchiudere le tue istruzioni SQL con jOOQ (Disclaimer:lavoro per l'azienda dietro jOOQ). jOOQ fornisce un'astrazione a livello di API per tutti i fatti di cui sopra. Una grande quantità di SQL può essere eseguita sia su DB2 che su Oracle, senza adattamento. Stiamo anche lavorando a un prodotto traduttore più indipendente:https://www.jooq.org/translate
A un livello di astrazione più elevato, Iberna (o altre implementazioni JPA) possono fare lo stesso per te