sql >> Base de Datos >  >> RDS >> Oracle

convertir una consulta de DB2 en una consulta de Oracle

¡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 y TIMESTAMP es el hecho de que TIMESTAMP tiene microsegundos. Pero DATE 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 y VARCHAR2 en oráculo
  • NULL . En Oracle, NULL es mucho más general que en DB2. Antes de DB2 v9.7, tenía que emitir NULL a cualquier tipo explícito, p. cast(null as integer) . Eso no es necesario en Oracle.

Objetos del sistema

  • SYSIBM.DUAL simplemente se convierte en DUAL
  • Funciones:todas son un poco diferentes. Habrá que comprobar caso por caso. Por ejemplo, LOCATE se convierte en INSTR

Sintaxis

  • TRUNCATE IMMEDIATE se convierte en TRUNCATE
  • EXCEPT se convierte en MINUS
  • DB2 FETCH FIRST n ROWS ONLY :No existe tal cláusula en Oracle. Tendrás que usar ROWNUM o ROW_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 escribir INSERT 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