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
DATE
eTIMESTAMP
é o fato de queTIMESTAMP
tem microssegundos. MasDATE
também pode conter informações de tempo. No DB2,DATE
não tem informações de tempo, eu acho. - Tipos de dados de caracteres:leia sobre a diferença entre
VARCHAR
eVARCHAR2
em Oracle NULL
. No Oracle,NULL
é muito mais geral do que no DB2. Antes do DB2 v9.7, você tinha que converterNULL
para qualquer tipo explícito, por exemplocast(null as integer)
. Isso não é necessário no Oracle.
Objetos do sistema
SYSIBM.DUAL
simplesmente se tornaDUAL
- Funções:todas são um pouco diferentes. Você terá que verificar caso a caso. Por exemplo,
LOCATE
torna-seINSTR
Sintaxe
TRUNCATE IMMEDIATE
torna-seTRUNCATE
EXCEPT
torna-seMINUS
- DB2
FETCH FIRST n ROWS ONLY
:Não existe tal cláusula no Oracle. Você terá que usarROWNUM
ouROW_NUMBER() OVER()
filtragem (veja este exemplo ) MERGE
do 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ê