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
DATE
iTIMESTAMP
jest fakt, żeTIMESTAMP
ma mikrosekundy. AleDATE
może również zawierać informacje o czasie. W DB2DATE
nie ma informacji o czasie, jak sądzę. - Typy danych znaków:Przeczytaj o różnicy między
VARCHAR
iVARCHAR2
w Oracle NULL
. W OracleNULL
jest znacznie bardziej ogólny niż w DB2. Przed DB2 v9.7 trzeba było rzutowaćNULL
na dowolny wyraźny typ, np.cast(null as integer)
. Nie jest to konieczne w Oracle.
Obiekty systemowe
SYSIBM.DUAL
po prostu staje sięDUAL
- Funkcje:Wszystkie są trochę inne. Musisz sprawdzić każdy przypadek. Na przykład
LOCATE
staje sięINSTR
Składnia
TRUNCATE IMMEDIATE
staje sięTRUNCATE
EXCEPT
staje sięMINUS
FETCH FIRST n ROWS ONLY
:W Oracle nie ma takiej klauzuli. Będziesz musiał użyćROWNUM
lubROW_NUMBER() OVER()
filtrowanie (zobacz ten przykład )MERGE
DB2 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