sql >> Database teknologi >  >> RDS >> Oracle

konvertere en DB2-forespørgsel til oracle-forespørgsel

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 og TIMESTAMP er det faktum, at TIMESTAMP har mikrosekunder. Men DATE kan også indeholde tidsoplysninger. I DB2, DATE har ingen tidsoplysninger, tror jeg.
  • Tegndatatyper:Læs om forskellen mellem VARCHAR og VARCHAR2 i Oracle
  • NULL . I Oracle, NULL er meget mere generel end i DB2. Før DB2 v9.7 skulle du caste NULL til enhver eksplicit type, f.eks. cast(null as integer) . Det er ikke nødvendigt i Oracle.

Systemobjekter

  • SYSIBM.DUAL bliver simpelthen DUAL
  • Funktioner:De er alle lidt forskellige. Du bliver nødt til at tjekke sag til sag. For eksempel LOCATE bliver INSTR

Syntaks

  • TRUNCATE IMMEDIATE bliver TRUNCATE
  • EXCEPT bliver MINUS
  • DB2's FETCH FIRST n ROWS ONLY :Der er ingen sådan klausul i Oracle. Du skal bruge ROWNUM eller ROW_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 skrive INSERT 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



  1. NodeJS:Hvor forbindes til databasen i kode?

  2. Antal andre rækker i tabellen med samme værdi

  3. Hvordan ændres VARCHAR-type til DATETIME ved hjælp af ALTER i MySQL?

  4. Undslip citat i HQL-forespørgsel