¡Tienes mucho trabajo por delante!
Entre DB2 y Oracle, algunas diferencias importantes son (solo una enumeración arbitraria de lo que se me ocurre):
Tipos de datos
- Tipos de datos numéricos:DB2 tiene muchos más tipos estándar, como
SMALLINT,INTEGER,DOUBLE, etc. Esos no existen en Oracle SQL (aunque algunos existen en PL/SQL). Esto es importante para DDL y para la conversión y algunos otros casos de uso, como la corrección de los predicados - Tipos de datos de fecha:la única diferencia de Oracle entre
DATEyTIMESTAMPes el hecho de queTIMESTAMPtiene microsegundos. PeroDATEtambién puede contener información de tiempo. En DB2,DATEno tiene información de tiempo, creo. - Tipos de datos de caracteres:Lea acerca de la diferencia entre
VARCHARyVARCHAR2en oráculo NULL. En Oracle,NULLes mucho más general que en DB2. Antes de DB2 v9.7, tenía que emitirNULLa cualquier tipo explícito, p.cast(null as integer). Eso no es necesario en Oracle.
Objetos del sistema
SYSIBM.DUALsimplemente se convierte enDUAL- Funciones:todas son un poco diferentes. Habrá que comprobar caso por caso. Por ejemplo,
LOCATEse convierte enINSTR
Sintaxis
TRUNCATE IMMEDIATEse convierte enTRUNCATEEXCEPTse convierte enMINUS- DB2
FETCH FIRST n ROWS ONLY:No existe tal cláusula en Oracle. Tendrás que usarROWNUMoROW_NUMBER() OVER()filtrado (vea este ejemplo ) MERGEde DB2 La declaración es más poderosa que la de Oracle, en caso de que use esto.- DB2 admite
INSERT INTO .. (..) VALUES (..), (..), (..). Con Oracle, tendría que escribirINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avanzado
- Si usa procedimientos almacenados, funcionan un poco diferente, especialmente con tipos de datos avanzados involucrados, pero eso está fuera del alcance aquí.
Su oportunidad más eficiente en esto podría ser usar algún tipo de abstracción SQL. Si está utilizando Java, le recomendaría envolver sus instrucciones SQL con jOOQ (Descargo de responsabilidad:trabajo para la empresa detrás de jOOQ). jOOQ proporciona abstracción a nivel de API para todos los hechos anteriores. Se puede ejecutar una gran cantidad de SQL tanto en DB2 como en Oracle, sin necesidad de adaptación. También estamos trabajando en un producto de traducción más independiente:https://www.jooq.org/translate
En un nivel más alto de abstracción, Hibernate (u otras implementaciones de JPA) pueden hacer lo mismo por usted