sql >> Database >  >> RDS >> Oracle

een DB2-query omzetten in Oracle-query

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 en TIMESTAMP is het feit dat TIMESTAMP heeft microseconden. Maar DATE kan ook tijdinformatie bevatten. In DB2 DATE heeft geen tijdinformatie, denk ik.
  • Typen karaktergegevens:lees over het verschil tussen VARCHAR en VARCHAR2 in orakel
  • NULL . In Oracle, NULL is veel algemener dan in DB2. Vóór DB2 v9.7 moest u NULL . casten naar elk expliciet type, b.v. cast(null as integer) . Dat is niet nodig in Oracle.

Systeemobjecten

  • SYSIBM.DUAL wordt gewoon DUAL
  • Functies:ze zijn allemaal een beetje anders. Je zult het van geval tot geval moeten bekijken. Bijvoorbeeld LOCATE wordt INSTR

Syntaxis

  • TRUNCATE IMMEDIATE wordt TRUNCATE
  • EXCEPT wordt MINUS
  • DB2's FETCH FIRST n ROWS ONLY :Er is geen dergelijke clausule in Oracle. U moet ROWNUM . gebruiken of ROW_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 je INSERT 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



  1. Aan de slag met SQLite Zoeken in volledige tekst

  2. Afbeelding invoegen in SQL Server 2005-afbeeldingsveld met alleen SQL

  3. Hoe krijg ik een kolom met opeenvolgende, oplopende nummers, zonder dat er nummers ontbreken?

  4. Toon enkele kolomwaarde van mysqli-query