Oracle
 sql >> Database >  >> RDS >> Oracle

convertire una query DB2 in una query Oracle

Hai molto lavoro da fare!

Tra DB2 e Oracle, alcune differenze importanti sono (solo un'enumerazione arbitraria di ciò a cui riesco a pensare):

Tipi di dati

  • Numero di tipi di dati:DB2 ha molti più tipi standard, come SMALLINT , INTEGER , DOUBLE , ecc. Quelli non esistono in Oracle SQL (sebbene alcuni esistano in PL/SQL). Questo è importante per DDL e per il casting e alcuni altri casi d'uso, come la correttezza dei predicati
  • Tipi di dati Data:l'unica differenza di Oracle tra DATE e TIMESTAMP è il fatto che TIMESTAMP ha microsecondi. Ma DATE può contenere anche informazioni sull'ora. In DB2, DATE non ha informazioni sull'ora, credo.
  • Tipi di dati del carattere:leggi la differenza tra VARCHAR e VARCHAR2 in Oracle
  • NULL . In Oracle, NULL è molto più generale che in DB2. Prima di DB2 v9.7, dovevi eseguire il cast di NULL a qualsiasi tipo esplicito, ad es. cast(null as integer) . Non è necessario in Oracle.

Oggetti di sistema

  • SYSIBM.DUAL diventa semplicemente DUAL
  • Funzioni:sono tutte un po' diverse. Dovrai controllare caso per caso. Ad esempio, LOCATE diventa INSTR

Sintassi

  • TRUNCATE IMMEDIATE diventa TRUNCATE
  • EXCEPT diventa MINUS
  • FETCH FIRST n ROWS ONLY :Non esiste tale clausola in Oracle. Dovrai usare ROWNUM o ROW_NUMBER() OVER() filtraggio (vedi questo esempio )
  • MERGE di DB2 istruzione è più potente di quella di Oracle, nel caso in cui la usi.
  • DB2 supporta INSERT INTO .. (..) VALUES (..), (..), (..) . Con Oracle, dovresti scrivere INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

Avanzate

  • Se utilizzi le procedure memorizzate, funzionano in modo leggermente diverso, specialmente con i tipi di dati avanzati coinvolti, ma qui non è ambito.

Il tuo colpo più efficiente in questo potrebbe essere usare l'astrazione SQL di qualche tipo. Se stai usando Java, ti consiglio di racchiudere le tue istruzioni SQL con jOOQ (Disclaimer:lavoro per l'azienda dietro jOOQ). jOOQ fornisce un'astrazione a livello di API per tutti i fatti di cui sopra. Una grande quantità di SQL può essere eseguita sia su DB2 che su Oracle, senza adattamento. Stiamo anche lavorando a un prodotto traduttore più indipendente:https://www.jooq.org/translate

A un livello di astrazione più elevato, Iberna (o altre implementazioni JPA) possono fare lo stesso per te