sql >> Databasteknik >  >> RDS >> Oracle

konvertera en DB2-fråga till oracle-fråga

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 DATE och TIMESTAMP är det faktum att TIMESTAMP har mikrosekunder. Men DATE kan även innehålla tidsinformation. I DB2, DATE har ingen tidsinformation tror jag.
  • Teckendatatyper:Läs om skillnaden mellan VARCHAR och VARCHAR2 i Oracle
  • NULL . I Oracle, NULL är mycket mer allmän än i DB2. Innan DB2 v9.7 var du tvungen att casta NULL till någon uttrycklig typ, t.ex. cast(null as integer) . Det är inte nödvändigt i Oracle.

Systemobjekt

  • SYSIBM.DUAL blir helt enkelt DUAL
  • Funktioner:De är alla lite olika. Du måste kontrollera från fall till fall. Till exempel LOCATE blir INSTR

Syntax

  • TRUNCATE IMMEDIATE blir TRUNCATE
  • EXCEPT blir MINUS
  • DB2:s FETCH FIRST n ROWS ONLY :Det finns ingen sådan klausul i Oracle. Du måste använda ROWNUM eller ROW_NUMBER() OVER() filtrering (se detta exempel )
  • DB2:s MERGE uttalandet är kraftfullare än Oracles, om du använder detta.
  • DB2 stöder INSERT INTO .. (..) VALUES (..), (..), (..) . Med Oracle skulle du behöva skriva INSERT 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



  1. hur man markerar sökresultat

  2. Välj tillbaka en kommaavgränsad lista grupperad efter ett ID

  3. hur infogar man en stor fil i BLOB (Oracle) utan att ladda hela filen till minnet?

  4. Hur man inaktiverar CDC på en uppsättning tabeller ELLER inaktiverar på alla tabeller i en databas i SQL Server - SQL Server Tutorial