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 オラクルで
    • 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. PL/SQLを使用してメッセージを表示するためのトリガー

    2. MySQL、接続を維持するか、必要なときに接続する必要がありますか?

    3. いくつかのテーブルのそれぞれの間でテストする方法は?

    4. 国際化を伴うMySQLデータベース設計