Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

convertendo uma consulta do DB2 em consulta oracle


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 e TIMESTAMP é o fato de que TIMESTAMP tem microssegundos. Mas DATE 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 e VARCHAR2 em Oracle
  • NULL . No Oracle, NULL é muito mais geral do que no DB2. Antes do DB2 v9.7, você tinha que converter NULL para qualquer tipo explícito, por exemplo cast(null as integer) . Isso não é necessário no Oracle.

Objetos do sistema

  • SYSIBM.DUAL simplesmente se torna DUAL
  • Funções:todas são um pouco diferentes. Você terá que verificar caso a caso. Por exemplo, LOCATE torna-se INSTR

Sintaxe

  • TRUNCATE IMMEDIATE torna-se TRUNCATE
  • EXCEPT torna-se MINUS
  • DB2 FETCH FIRST n ROWS ONLY :Não existe tal cláusula no Oracle. Você terá que usar ROWNUM ou ROW_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 escrever INSERT 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ê