Je hebt veel werk voor de boeg!
Tussen DB2 en Oracle zijn enkele belangrijke verschillen (slechts een willekeurige opsomming van wat ik kan bedenken):
Gegevenstypen
- Aantal gegevenstypen:DB2 heeft veel meer standaardtypen, zoals
SMALLINT
,INTEGER
,DOUBLE
, enz. Die bestaan niet in Oracle SQL (hoewel sommige wel in PL/SQL). Dit is belangrijk voor DDL en voor casting en enkele andere use-cases, zoals de juistheid van predikaten - Datumgegevenstypes:Oracle's enige verschil tussen
DATE
enTIMESTAMP
is het feit datTIMESTAMP
heeft microseconden. MaarDATE
kan ook tijdinformatie bevatten. In DB2DATE
heeft geen tijdinformatie, denk ik. - Typen karaktergegevens:lees over het verschil tussen
VARCHAR
enVARCHAR2
in orakel NULL
. In Oracle,NULL
is veel algemener dan in DB2. Vóór DB2 v9.7 moest uNULL
. casten naar elk expliciet type, b.v.cast(null as integer)
. Dat is niet nodig in Oracle.
Systeemobjecten
SYSIBM.DUAL
wordt gewoonDUAL
- Functies:ze zijn allemaal een beetje anders. Je zult het van geval tot geval moeten bekijken. Bijvoorbeeld
LOCATE
wordtINSTR
Syntaxis
TRUNCATE IMMEDIATE
wordtTRUNCATE
EXCEPT
wordtMINUS
- DB2's
FETCH FIRST n ROWS ONLY
:Er is geen dergelijke clausule in Oracle. U moetROWNUM
. gebruiken ofROW_NUMBER() OVER()
filteren (zie dit voorbeeld ) - DB2's
MERGE
verklaring is krachtiger dan die van Oracle, voor het geval je dit gebruikt. - DB2 ondersteunt
INSERT INTO .. (..) VALUES (..), (..), (..)
. Met Oracle zou jeINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
moeten schrijven
Geavanceerd
- Als je opgeslagen procedures gebruikt, werken ze een beetje anders, vooral als het gaat om geavanceerde gegevenstypen, maar dat valt hier buiten het bestek.
De meest efficiënte manier om dit te doen, is misschien het gebruik van een soort SQL-abstractie. Als je Java gebruikt, raad ik je aan om je SQL-statements te verpakken met jOOQ (Disclaimer:ik werk voor het bedrijf achter jOOQ). jOOQ biedt abstractie op API-niveau voor alle bovenstaande feiten. Een groot deel van SQL kan zowel op DB2 als op Oracle worden uitgevoerd, zonder aanpassing. We werken ook aan een onafhankelijker vertaalproduct:https://www.jooq.org/translate
Op een hoger abstractieniveau, Hibernate (of andere JPA-implementaties) kunnen hetzelfde voor u doen