¡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
DATE
yTIMESTAMP
es el hecho de queTIMESTAMP
tiene microsegundos. PeroDATE
también puede contener información de tiempo. En DB2,DATE
no tiene información de tiempo, creo. - Tipos de datos de caracteres:Lea acerca de la diferencia entre
VARCHAR
yVARCHAR2
en oráculo NULL
. En Oracle,NULL
es mucho más general que en DB2. Antes de DB2 v9.7, tenía que emitirNULL
a cualquier tipo explícito, p.cast(null as integer)
. Eso no es necesario en Oracle.
Objetos del sistema
SYSIBM.DUAL
simplemente se convierte enDUAL
- Funciones:todas son un poco diferentes. Habrá que comprobar caso por caso. Por ejemplo,
LOCATE
se convierte enINSTR
Sintaxis
TRUNCATE IMMEDIATE
se convierte enTRUNCATE
EXCEPT
se convierte enMINUS
- DB2
FETCH FIRST n ROWS ONLY
:No existe tal cláusula en Oracle. Tendrás que usarROWNUM
oROW_NUMBER() OVER()
filtrado (vea este ejemplo ) MERGE
de 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