やるべきことはたくさんあります!
DB2 と Oracle の間には、いくつかの重要な違いがあります (私が考えられることを勝手に列挙しただけです):
データ型
- 数値データ型:DB2 には、
SMALLINTなど、さらに多くの標準型があります。 ,INTEGER,DOUBLEなど。これらは Oracle SQL には存在しません (PL/SQL にはいくつか存在しますが)。これは、DDL、キャスト、および述語の正確さなどの他のユースケースにとって重要です - 日付データ型:Oracle の
DATEの唯一の違い およびTIMESTAMPTIMESTAMPという事実です マイクロ秒を持っています。しかしDATE時刻情報も含まれる場合があります。 DB2 では、DATE時間情報がないと思います - 文字データ型:
VARCHARの違いについて読んでください。 およびVARCHAR2オラクルで NULL. Oracle では、NULLDB2 よりもはるかに一般的です。 DB2 v9.7 より前は、NULLをキャストする必要がありました 明示的な型へ。cast(null as integer). Oracle では必要ありません。
システム オブジェクト
SYSIBM.DUAL単純にDUALになります- 関数: すべて少しずつ異なります。ケースバイケースで確認する必要があります。例:
LOCATEINSTRになります
構文
TRUNCATE IMMEDIATETRUNCATEになりますEXCEPTMINUSになります- 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 実装) が同じことを行うことができます