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
DATEeTIMESTAMPè il fatto cheTIMESTAMPha microsecondi. MaDATEpuò contenere anche informazioni sull'ora. In DB2,DATEnon ha informazioni sull'ora, credo. - Tipi di dati del carattere:leggi la differenza tra
VARCHAReVARCHAR2in Oracle NULL. In Oracle,NULLè molto più generale che in DB2. Prima di DB2 v9.7, dovevi eseguire il cast diNULLa qualsiasi tipo esplicito, ad es.cast(null as integer). Non è necessario in Oracle.
Oggetti di sistema
SYSIBM.DUALdiventa semplicementeDUAL- Funzioni:sono tutte un po' diverse. Dovrai controllare caso per caso. Ad esempio,
LOCATEdiventaINSTR
Sintassi
TRUNCATE IMMEDIATEdiventaTRUNCATEEXCEPTdiventaMINUS-
FETCH FIRST n ROWS ONLY:Non esiste tale clausola in Oracle. Dovrai usareROWNUMoROW_NUMBER() OVER()filtraggio (vedi questo esempio ) MERGEdi 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