Oracle
 sql >> Baza danych >  >> RDS >> Oracle

konwertowanie zapytania DB2 na zapytanie oracle

Przed Tobą dużo pracy!

Między DB2 a Oracle, kilka ważnych różnic to (tylko arbitralne wyliczenie tego, o czym mogę pomyśleć):

Typy danych

  • Typy danych liczbowych:DB2 ma o wiele więcej standardowych typów, takich jak SMALLINT , INTEGER , DOUBLE , itp. Te nie istnieją w Oracle SQL (chociaż niektóre istnieją w PL/SQL). Jest to ważne dla DDL, rzutowania i niektórych innych przypadków użycia, takich jak poprawność predykatów
  • Typy danych dat:jedyna różnica Oracle między DATE i TIMESTAMP jest fakt, że TIMESTAMP ma mikrosekundy. Ale DATE może również zawierać informacje o czasie. W DB2 DATE nie ma informacji o czasie, jak sądzę.
  • Typy danych znaków:Przeczytaj o różnicy między VARCHAR i VARCHAR2 w Oracle
  • NULL . W Oracle NULL jest znacznie bardziej ogólny niż w DB2. Przed DB2 v9.7 trzeba było rzutować NULL na dowolny wyraźny typ, np. cast(null as integer) . Nie jest to konieczne w Oracle.

Obiekty systemowe

  • SYSIBM.DUAL po prostu staje się DUAL
  • Funkcje:Wszystkie są trochę inne. Musisz sprawdzić każdy przypadek. Na przykład LOCATE staje się INSTR

Składnia

  • TRUNCATE IMMEDIATE staje się TRUNCATE
  • EXCEPT staje się MINUS
  • FETCH FIRST n ROWS ONLY :W Oracle nie ma takiej klauzuli. Będziesz musiał użyć ROWNUM lub ROW_NUMBER() OVER() filtrowanie (zobacz ten przykład )
  • MERGE DB2 oświadczenie jest potężniejsze niż Oracle, na wypadek, gdybyś go użył.
  • DB2 obsługuje INSERT INTO .. (..) VALUES (..), (..), (..) . W Oracle musiałbyś napisać INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

Zaawansowane

  • Jeśli używasz procedur składowanych, działają one nieco inaczej, zwłaszcza w przypadku zaawansowanych typów danych, ale to jest poza zakresem tutaj.

Najskuteczniejszym sposobem na to może być użycie jakiegoś rodzaju abstrakcji SQL. Jeśli używasz Javy, sugerowałbym, abyś otoczył swoje instrukcje SQL jOOQ (Zastrzeżenie:pracuję dla firmy stojącej za jOOQ). jOOQ zapewnia abstrakcję na poziomie API dla wszystkich powyższych faktów. Wiele SQL można wykonać zarówno w DB2, jak i Oracle, bez adaptacji. Pracujemy również nad bardziej niezależnym produktem tłumacza:https://www.jooq.org/translate

Na wyższym poziomie abstrakcji Hibernacja (lub inne implementacje JPA) mogą zrobić to samo dla Ciebie



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiedy wartości kolumn indeksu Oracle są puste?

  2. Jak wybrać i zoptymalizować indeksy oracle?

  3. Agregacja ciągów Oracle

  4. Czy PS/SQL Oracle wymaga określonej kolejności wpisów w sekcji `declare` bloku?

  5. nieprawidłowa ścieżka podczas próby zapisania pliku w pl sql