Du har mycket arbete framför dig!
Mellan DB2 och Oracle är några viktiga skillnader (bara en godtycklig uppräkning av vad jag kan komma på):
Datatyper
- Taldatatyper:DB2 har många fler standardtyper, till exempel
SMALLINT,INTEGER,DOUBLE, etc. De finns inte i Oracle SQL (även om vissa finns i PL/SQL). Detta är viktigt för DDL och för gjutning och vissa andra användningsfall, såsom korrektheten av predikat - Datumdatatyper:Oracles enda skillnad mellan
DATEochTIMESTAMPär det faktum attTIMESTAMPhar mikrosekunder. MenDATEkan även innehålla tidsinformation. I DB2,DATEhar ingen tidsinformation tror jag. - Teckendatatyper:Läs om skillnaden mellan
VARCHARochVARCHAR2i Oracle NULL. I Oracle,NULLär mycket mer allmän än i DB2. Innan DB2 v9.7 var du tvungen att castaNULLtill någon uttrycklig typ, t.ex.cast(null as integer). Det är inte nödvändigt i Oracle.
Systemobjekt
SYSIBM.DUALblir helt enkeltDUAL- Funktioner:De är alla lite olika. Du måste kontrollera från fall till fall. Till exempel
LOCATEblirINSTR
Syntax
TRUNCATE IMMEDIATEblirTRUNCATEEXCEPTblirMINUS- DB2:s
FETCH FIRST n ROWS ONLY:Det finns ingen sådan klausul i Oracle. Du måste användaROWNUMellerROW_NUMBER() OVER()filtrering (se detta exempel ) - DB2:s
MERGEuttalandet är kraftfullare än Oracles, om du använder detta. - DB2 stöder
INSERT INTO .. (..) VALUES (..), (..), (..). Med Oracle skulle du behöva skrivaINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avancerat
- Om du använder lagrade procedurer fungerar de lite annorlunda, särskilt med avancerade datatyper inblandade, men det är utanför omfattningen här.
Ditt mest effektiva skott på detta kan vara att använda SQL-abstraktion av något slag. Om du använder Java skulle jag rekommendera att du slår in dina SQL-satser med jOOQ (Ansvarsfriskrivning:Jag arbetar för företaget bakom jOOQ). jOOQ tillhandahåller abstraktion på API-nivå för alla ovanstående fakta. En hel del SQL kan köras både på DB2 och Oracle, utan anpassning. Vi arbetar också med en mer oberoende översättarprodukt:https://www.jooq.org/translate
På en högre abstraktionsnivå, Hibernate (eller andra JPA-implementeringar) kan göra samma sak för dig