Du har en masse arbejde forude!
Mellem DB2 og Oracle er nogle vigtige forskelle (bare en vilkårlig opremsning af, hvad jeg kan komme i tanke om):
Datatyper
- Taldatatyper:DB2 har mange flere standardtyper, såsom
SMALLINT
,INTEGER
,DOUBLE
osv. Disse findes ikke i Oracle SQL (selvom nogle findes i PL/SQL). Dette er vigtigt for DDL og for casting og nogle andre brugssager, såsom korrektheden af prædikater - Datodatatyper:Oracles eneste forskel mellem
DATE
ogTIMESTAMP
er det faktum, atTIMESTAMP
har mikrosekunder. MenDATE
kan også indeholde tidsoplysninger. I DB2,DATE
har ingen tidsoplysninger, tror jeg. - Tegndatatyper:Læs om forskellen mellem
VARCHAR
ogVARCHAR2
i Oracle NULL
. I Oracle,NULL
er meget mere generel end i DB2. Før DB2 v9.7 skulle du casteNULL
til enhver eksplicit type, f.eks.cast(null as integer)
. Det er ikke nødvendigt i Oracle.
Systemobjekter
SYSIBM.DUAL
bliver simpelthenDUAL
- Funktioner:De er alle lidt forskellige. Du bliver nødt til at tjekke sag til sag. For eksempel
LOCATE
bliverINSTR
Syntaks
TRUNCATE IMMEDIATE
bliverTRUNCATE
EXCEPT
bliverMINUS
- DB2's
FETCH FIRST n ROWS ONLY
:Der er ingen sådan klausul i Oracle. Du skal brugeROWNUM
ellerROW_NUMBER() OVER()
filtrering (se dette eksempel ) - DB2's
MERGE
sætningen er mere kraftfuld end Oracles, hvis du bruger denne. - DB2 understøtter
INSERT INTO .. (..) VALUES (..), (..), (..)
. Med Oracle skal du skriveINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Avanceret
- Hvis du bruger lagrede procedurer, fungerer de lidt anderledes, især med avancerede datatyper involveret, men det er uden for rammerne her.
Dit mest effektive skud på dette kan være at bruge SQL-abstraktion af en slags. Hvis du bruger Java, vil jeg anbefale, at du pakker dine SQL-sætninger med jOOQ (Ansvarsfraskrivelse:Jeg arbejder for firmaet bag jOOQ). jOOQ leverer abstraktion på API-niveau for alle ovenstående fakta. En stor del af SQL kan udføres både på DB2 og Oracle uden tilpasning. Vi arbejder også på et mere uafhængigt oversætterprodukt:https://www.jooq.org/translate
På et højere abstraktionsniveau, Dvale (eller andre JPA-implementeringer) kan gøre det samme for dig