Oracle
 sql >> база данни >  >> RDS >> Oracle

конвертиране на DB2 заявка в Oracle заявка

Предстои ви много работа!

Между DB2 и Oracle има някои важни разлики (просто произволно изброяване на това, за което мога да се сетя):

Типове данни

  • Числови типове данни:DB2 има много повече стандартни типове, като SMALLINT , INTEGER , DOUBLE и т.н. Те не съществуват в Oracle SQL (въпреки че някои съществуват в PL/SQL). Това е важно за DDL и за кастинг и някои други случаи на употреба, като например коректността на предикатите
  • Типове данни за дата:Единствената разлика на Oracle между DATE и TIMESTAMP е фактът, че TIMESTAMP има микросекунди. Но DATE може също да съдържа информация за времето. В DB2, DATE няма информация за времето, мисля.
  • Символни типове данни:Прочетете за разликата между VARCHAR и VARCHAR2 в Oracle
  • NULL . В Oracle, NULL е много по-общо отколкото в DB2. Преди DB2 v9.7 трябваше да преобразувате NULL към произволен изричен тип, напр. cast(null as integer) . Това не е необходимо в Oracle.

Системни обекти

  • SYSIBM.DUAL просто става DUAL
  • Функции:Всички те са малко по-различни. Ще трябва да проверите за всеки случай. Например LOCATE става INSTR

Синтаксис

  • TRUNCATE IMMEDIATE става TRUNCATE
  • EXCEPT става MINUS
  • DB2 FETCH FIRST n ROWS ONLY :В Oracle няма такава клауза. Ще трябва да използвате ROWNUM или ROW_NUMBER() OVER() филтриране (вижте този пример )
  • DB2 MERGE е по-мощен от този на Oracle, в случай че използвате това.
  • DB2 поддържа INSERT INTO .. (..) VALUES (..), (..), (..) . С Oracle ще трябва да напишете INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

Разширено

  • Ако използвате съхранени процедури, те работят малко по-различно, особено с включени разширени типове данни, но това е извън обхвата тук.

Вашият най-ефективен изстрел в това може да бъде да използвате SQL абстракция от някакъв вид. Ако използвате Java, бих ви препоръчал да обвиете вашите SQL изрази с jOOQ (Отказ от отговорност:работя за компанията зад jOOQ). jOOQ предоставя абстракция на ниво API за всички горепосочени факти. Голяма част от SQL може да се изпълнява както на DB2, така и на Oracle, без адаптиране. Работим и върху по-независим продукт за преводач:https://www.jooq.org/translate

На по-високо ниво на абстракция, Hibernate (или други реализации на JPA) могат да направят същото за вас



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо не мога да използвам променливи за свързване в DDL/SCL изрази в динамичен SQL?

  2. Oracle SQL - Съединява Синтаксис/Ключови думи

  3. oracle 12c - изберете низ след последното появяване на символ

  4. Oracle връща същия псевдоним за различни случаи при избор

  5. SQL:Възможно ли е да SUM() полета от тип INTERVAL?