sql >> Databáze >  >> RDS >> Oracle

převod dotazu DB2 na dotaz Oracle

Máte před sebou spoustu práce!

Mezi DB2 a Oracle jsou některé důležité rozdíly (jen libovolný výčet toho, co mě napadá):

Datové typy

  • Číselné datové typy:DB2 má mnohem více standardních typů, jako je SMALLINT , INTEGER , DOUBLE , atd. Ty v Oracle SQL neexistují (ačkoli některé existují v PL/SQL). To je důležité pro DDL a pro casting a některé další případy použití, jako je správnost predikátů
  • Datové typy dat:Jediný rozdíl společnosti Oracle mezi DATE a TIMESTAMP je skutečnost, že TIMESTAMP má mikrosekundy. Ale DATE může obsahovat i časové údaje. V DB2 DATE myslím, že nemá žádné časové informace.
  • Znakové datové typy:Přečtěte si o rozdílech mezi VARCHAR a VARCHAR2 v Oracle
  • NULL . V Oracle NULL je mnohem obecnější než v DB2. Před DB2 v9.7 jste museli přetypovat NULL na jakýkoli explicitní typ, např. cast(null as integer) . V Oracle to není nutné.

Systémové objekty

  • SYSIBM.DUAL jednoduše se změní na DUAL
  • Funkce:Všechny jsou trochu jiné. Budete muset zkontrolovat případ od případu. Například LOCATE se změní na INSTR

Syntaxe

  • TRUNCATE IMMEDIATE se změní na TRUNCATE
  • EXCEPT se změní na MINUS
  • DB2 FETCH FIRST n ROWS ONLY :V Oracle žádná taková klauzule neexistuje. Budete muset použít ROWNUM nebo ROW_NUMBER() OVER() filtrování (viz tento příklad )
  • MERGE DB2 příkaz je výkonnější než příkaz Oracle, v případě, že jej používáte.
  • DB2 podporuje INSERT INTO .. (..) VALUES (..), (..), (..) . U Oracle byste museli napsat INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

Pokročilé

  • Pokud používáte uložené procedury, fungují trochu jinak, zvláště s pokročilými datovými typy, ale to je mimo rozsah.

Nejúčinnějším pokusem o to může být použití nějaké abstrakce SQL. Pokud používáte Javu, doporučil bych vám zabalit příkazy SQL do jOOQ (Prohlášení:Pracuji pro společnost za jOOQ). jOOQ poskytuje abstrakci na úrovni API pro všechny výše uvedené skutečnosti. Velké množství SQL lze spustit jak na DB2, tak na Oracle, bez přizpůsobení. Pracujeme také na nezávislejším překladatelském produktu:https://www.jooq.org/translate

Na vyšší úrovni abstrakce, Hibernate (nebo jiné implementace JPA) mohou udělat totéž pro vás



  1. Funkce Postgres ratio_to_report

  2. Oracle SQL – Jak získat odlišné řádky pomocí analytické funkce RANK() nebo DENSE_RANK() nebo ROW_NUMBER()?

  3. Nalezení spanning forest (S REKURSIVNÍM, PostgreSQL 9.5)

  4. SQL Server dotaz k nalezení všech aktuálních názvů databází