Vous avez beaucoup de travail devant vous !
Entre DB2 et Oracle, certaines différences importantes sont (juste une énumération arbitraire de ce à quoi je peux penser) :
Types de données
- Types de données numériques :DB2 a beaucoup plus de types standard, tels que
SMALLINT
,INTEGER
,DOUBLE
, etc. Ceux-ci n'existent pas dans Oracle SQL (bien que certains existent dans PL/SQL). Ceci est important pour DDL et pour la diffusion et certains autres cas d'utilisation, tels que l'exactitude des prédicats - Types de données de date :la seule différence d'Oracle entre
DATE
etTIMESTAMP
est le fait queTIMESTAMP
a des microsecondes. MaisDATE
peut également contenir des informations temporelles. Dans DB2,DATE
n'a pas d'informations sur l'heure, je pense. - Types de données de caractères :découvrez la différence entre
VARCHAR
etVARCHAR2
dans Oracle NULL
. Dans Oracle,NULL
est beaucoup plus général que dans DB2. Avant DB2 v9.7, vous deviez casterNULL
à n'importe quel type explicite, par ex.cast(null as integer)
. Ce n'est pas nécessaire dans Oracle.
Objets système
SYSIBM.DUAL
devient simplementDUAL
- Fonctions :elles sont toutes un peu différentes. Il faudra vérifier au cas par cas. Par exemple,
LOCATE
devientINSTR
Syntaxe
TRUNCATE IMMEDIATE
devientTRUNCATE
EXCEPT
devientMINUS
- DB2's
FETCH FIRST n ROWS ONLY
:Il n'y a pas une telle clause dans Oracle. Vous devrez utiliserROWNUM
ouROW_NUMBER() OVER()
filtrage (voir cet exemple ) MERGE
de DB2 instruction est plus puissante que celle d'Oracle, au cas où vous l'utiliseriez.- DB2 prend en charge
INSERT INTO .. (..) VALUES (..), (..), (..)
. Avec Oracle, il faudrait écrireINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avancé
- Si vous utilisez des procédures stockées, elles fonctionnent un peu différemment, en particulier avec les types de données avancés impliqués, mais cela sort du cadre ici.
Votre coup le plus efficace pour cela pourrait être d'utiliser une sorte d'abstraction SQL. Si vous utilisez Java, je vous recommande d'envelopper vos instructions SQL avec jOOQ (Avertissement :je travaille pour l'entreprise derrière jOOQ). jOOQ fournit une abstraction au niveau de l'API pour tous les faits ci-dessus. Une grande partie de SQL peut être exécutée à la fois sur DB2 et Oracle, sans adaptation. Nous travaillons également sur un produit de traduction plus indépendant :https://www.jooq.org/translate
À un niveau d'abstraction supérieur, Hibernate (ou d'autres implémentations JPA) peuvent faire la même chose pour vous