やるべきことはたくさんあります!
DB2 と Oracle の間には、いくつかの重要な違いがあります (私が考えられることを勝手に列挙しただけです):
データ型
- 数値データ型:DB2 には、
SMALLINT
など、さらに多くの標準型があります。 ,INTEGER
,DOUBLE
など。これらは Oracle SQL には存在しません (PL/SQL にはいくつか存在しますが)。これは、DDL、キャスト、および述語の正確さなどの他のユースケースにとって重要です - 日付データ型:Oracle の
DATE
の唯一の違い およびTIMESTAMP
TIMESTAMP
という事実です マイクロ秒を持っています。しかしDATE
時刻情報も含まれる場合があります。 DB2 では、DATE
時間情報がないと思います - 文字データ型:
VARCHAR
の違いについて読んでください。 およびVARCHAR2
オラクルで 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 実装) が同じことを行うことができます