Przed Tobą dużo pracy!
Między DB2 a Oracle, kilka ważnych różnic to (tylko arbitralne wyliczenie tego, o czym mogę pomyśleć):
Typy danych
- Typy danych liczbowych:DB2 ma o wiele więcej standardowych typów, takich jak
SMALLINT,INTEGER,DOUBLE, itp. Te nie istnieją w Oracle SQL (chociaż niektóre istnieją w PL/SQL). Jest to ważne dla DDL, rzutowania i niektórych innych przypadków użycia, takich jak poprawność predykatów - Typy danych dat:jedyna różnica Oracle między
DATEiTIMESTAMPjest fakt, żeTIMESTAMPma mikrosekundy. AleDATEmoże również zawierać informacje o czasie. W DB2DATEnie ma informacji o czasie, jak sądzę. - Typy danych znaków:Przeczytaj o różnicy między
VARCHARiVARCHAR2w Oracle NULL. W OracleNULLjest znacznie bardziej ogólny niż w DB2. Przed DB2 v9.7 trzeba było rzutowaćNULLna dowolny wyraźny typ, np.cast(null as integer). Nie jest to konieczne w Oracle.
Obiekty systemowe
SYSIBM.DUALpo prostu staje sięDUAL- Funkcje:Wszystkie są trochę inne. Musisz sprawdzić każdy przypadek. Na przykład
LOCATEstaje sięINSTR
Składnia
TRUNCATE IMMEDIATEstaje sięTRUNCATEEXCEPTstaje sięMINUSFETCH FIRST n ROWS ONLY:W Oracle nie ma takiej klauzuli. Będziesz musiał użyćROWNUMlubROW_NUMBER() OVER()filtrowanie (zobacz ten przykład )MERGEDB2 oświadczenie jest potężniejsze niż Oracle, na wypadek, gdybyś go użył.- DB2 obsługuje
INSERT INTO .. (..) VALUES (..), (..), (..). W Oracle musiałbyś napisaćINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Zaawansowane
- Jeśli używasz procedur składowanych, działają one nieco inaczej, zwłaszcza w przypadku zaawansowanych typów danych, ale to jest poza zakresem tutaj.
Najskuteczniejszym sposobem na to może być użycie jakiegoś rodzaju abstrakcji SQL. Jeśli używasz Javy, sugerowałbym, abyś otoczył swoje instrukcje SQL jOOQ (Zastrzeżenie:pracuję dla firmy stojącej za jOOQ). jOOQ zapewnia abstrakcję na poziomie API dla wszystkich powyższych faktów. Wiele SQL można wykonać zarówno w DB2, jak i Oracle, bez adaptacji. Pracujemy również nad bardziej niezależnym produktem tłumacza:https://www.jooq.org/translate
Na wyższym poziomie abstrakcji Hibernacja (lub inne implementacje JPA) mogą zrobić to samo dla Ciebie