Предстои ви много работа!
Между DB2 и Oracle има някои важни разлики (просто произволно изброяване на това, за което мога да се сетя):
Типове данни
- Числови типове данни:DB2 има много повече стандартни типове, като
SMALLINT
,INTEGER
,DOUBLE
и т.н. Те не съществуват в Oracle SQL (въпреки че някои съществуват в PL/SQL). Това е важно за DDL и за кастинг и някои други случаи на употреба, като например коректността на предикатите - Типове данни за дата:Единствената разлика на Oracle между
DATE
иTIMESTAMP
е фактът, чеTIMESTAMP
има микросекунди. НоDATE
може също да съдържа информация за времето. В DB2,DATE
няма информация за времето, мисля. - Символни типове данни:Прочетете за разликата между
VARCHAR
иVARCHAR2
в Oracle NULL
. В Oracle,NULL
е много по-общо отколкото в DB2. Преди DB2 v9.7 трябваше да преобразуватеNULL
към произволен изричен тип, напр.cast(null as integer)
. Това не е необходимо в Oracle.
Системни обекти
SYSIBM.DUAL
просто ставаDUAL
- Функции:Всички те са малко по-различни. Ще трябва да проверите за всеки случай. Например
LOCATE
ставаINSTR
Синтаксис
TRUNCATE IMMEDIATE
ставаTRUNCATE
EXCEPT
ставаMINUS
- DB2
FETCH FIRST n ROWS ONLY
:В Oracle няма такава клауза. Ще трябва да използватеROWNUM
илиROW_NUMBER() OVER()
филтриране (вижте този пример ) - DB2
MERGE
е по-мощен от този на Oracle, в случай че използвате това. - DB2 поддържа
INSERT INTO .. (..) VALUES (..), (..), (..)
. С Oracle ще трябва да напишетеINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Разширено
- Ако използвате съхранени процедури, те работят малко по-различно, особено с включени разширени типове данни, но това е извън обхвата тук.
Вашият най-ефективен изстрел в това може да бъде да използвате SQL абстракция от някакъв вид. Ако използвате Java, бих ви препоръчал да обвиете вашите SQL изрази с jOOQ (Отказ от отговорност:работя за компанията зад jOOQ). jOOQ предоставя абстракция на ниво API за всички горепосочени факти. Голяма част от SQL може да се изпълнява както на DB2, така и на Oracle, без адаптиране. Работим и върху по-независим продукт за преводач:https://www.jooq.org/translate
На по-високо ниво на абстракция, Hibernate (или други реализации на JPA) могат да направят същото за вас