Você tem muito trabalho pela frente!
Entre o DB2 e o Oracle, algumas diferenças importantes são (apenas uma enumeração arbitrária do que consigo pensar):
Tipos de dados
- Tipos de dados numéricos:o DB2 tem muitos outros tipos padrão, como
SMALLINT,INTEGER,DOUBLE, etc. Esses não existem no Oracle SQL (embora alguns existam no PL/SQL). Isso é importante para DDL e para conversão e alguns outros casos de uso, como a correção de predicados - Tipos de dados de data:a única diferença do Oracle entre
DATEeTIMESTAMPé o fato de queTIMESTAMPtem microssegundos. MasDATEtambém pode conter informações de tempo. No DB2,DATEnão tem informações de tempo, eu acho. - Tipos de dados de caracteres:leia sobre a diferença entre
VARCHAReVARCHAR2em Oracle NULL. No Oracle,NULLé muito mais geral do que no DB2. Antes do DB2 v9.7, você tinha que converterNULLpara qualquer tipo explícito, por exemplocast(null as integer). Isso não é necessário no Oracle.
Objetos do sistema
SYSIBM.DUALsimplesmente se tornaDUAL- Funções:todas são um pouco diferentes. Você terá que verificar caso a caso. Por exemplo,
LOCATEtorna-seINSTR
Sintaxe
TRUNCATE IMMEDIATEtorna-seTRUNCATEEXCEPTtorna-seMINUS- DB2
FETCH FIRST n ROWS ONLY:Não existe tal cláusula no Oracle. Você terá que usarROWNUMouROW_NUMBER() OVER()filtragem (veja este exemplo ) MERGEdo DB2 declaração é mais poderosa que a do Oracle, caso você use isso.- DB2 suporta
INSERT INTO .. (..) VALUES (..), (..), (..). Com o Oracle, você teria que escreverINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avançado
- Se você usa procedimentos armazenados, eles funcionam de maneira um pouco diferente, especialmente com tipos de dados avançados envolvidos, mas isso está fora do escopo aqui.
Sua tentativa mais eficiente para isso pode ser usar algum tipo de abstração SQL. Se você estiver usando Java, recomendo que você envolva suas instruções SQL com jOOQ (Isenção de responsabilidade:eu trabalho para a empresa por trás do jOOQ). jOOQ fornece abstração em nível de API para todos os fatos acima. Uma grande quantidade de SQL pode ser executada tanto no DB2 quanto no Oracle, sem adaptação. Também estamos trabalhando em um produto de tradução mais independente:https://www.jooq.org/translate
Em um nível mais alto de abstração, Hibernate (ou outras implementações de JPA) podem fazer o mesmo por você