DB2からOracleへの移行の注意点

メインフレームの業務システムをオープン環境に移行する際、DB2データベースをOracleデータベースに変更する場合は、業務システムのソース変更が必要になることがあります。

本付録では、DB2データベースからOracleデータベースへの移行時に発生するアプリケーションの移行問題について説明します。

詳細については、各ベンダーの移行ガイドを参照してください。

以下は、データベースの移行に必要なアプリケーションの変更事項です。

  • OPTIMIZE … FOR FETCH

    • タイプ

      OPTIMIZE FOR 1 ROWS FOR FETCH ONLY
    • 変更 : コメントアウト

  • SET CURRENT PACKAGE

    • タイプ

      EXEC SQL
         SET CURRENT PACKAGE = “文字”
      END-EXEC.
    • 変更 : コメントアウト

  • SET :[Host Variable] = CURRENT TIMESTAMP

    • タイプ

      EXEC SQL
         SET :[Host Variable] = CURRENT TIMESTAMP
      END-EXEC.
    • 変更 : コメントアウトとクエリの挿入

      EXEC SQL
         SELECT TO_CHAR(SYSTIMESTAMP,’YYYY.MM.DD.HH24.MI.SS.FF6’)
         INTO :[Host Variable]
         FROM DUAL
      END-EXEC.
  • CURRENT TIMESTAMP

    • タイプ

      ,[DB Column] = CURRENT TIMESTAMP
    • 変更

      ,[DB Column] = SYSTIMESTAMP
  • EVALUATE

    • タイプ

      EVALUATE
         WHEN [条件]…
      END-EVALUATE.
    • 変更

      EVALUATE TRUE
         WHEN [条件]…
      END-EVALUATE.

      EVALUATE句の条件がない場合は、MF-COBOLではエラーが返されるため、条件がないときはTRUEに代替する必要があります。

  • SQLSTATE変数の定義

    • タイプ

      EXEC SQL
         BEGIN DECLARE SECTION
      END-EXEC.
    • 変更

      • 上記の文がある場合は、文の中にSQLSTATE変数を挿入します。

      • 上記の文がない場合は、SQLSTATE変数を定義します。

      EXEC SQL
         BEGIN DECLARE SECTION
      END-EXEC.
      
      01 SQLSTATE PIC X(5).
      
      EXEC SQL
         END DECLARE SECTION
      END-EXEC
  • SQLCODEの変換

    • Case 1

      • タイプ

        IF SQLCODE = -811
      • 変更

        IF SQLCODE = -2112
    • Case 2

      • タイプ

        IF SQLCODE = -803
      • 変更

        IF SQLCODE = -1
    • Case 3

      • タイプ

        WHEN -811 PERFORM [Section Name]
      • 変更

        WHEN -2112 PERFORM [Section Name]
    • Case 4

      • タイプ

        WHEN -803 PERFORM [Section Name]
      • 変更

        WHEN -1 PERFORM [Section Name]

      [参考]

      ORA 02112, 00000, "PCC: SELECT..INTO returns too many rows"
      ORA 00001, 00000, "unique constraint (%s.%s) violated"
  • SET :[Host Variable] = CURRENT DATE

    • タイプ

      EXEC SQL
         SET :[Host Variable] = CURRENT DATE
      END-EXEC.
    • 変更

      EXEC SQL
         SELECT TO_CHAR(SYSDATE,’YYYY-MM-DD’)
         INTO :[Host Variable] FROM DUAL
      END-EXEC.
  • CURRENT DATE

    • タイプ

      [DB Column] = CURRENT DATE
    • 変更

      [DB Column] = TO_CHAR(SYSDATE,’YYYY-MM-DD’)
  • SET :[Host Variable] = CURRENT TIME

    • タイプ

      EXEC SQL
         SET :[Host Variable] = CURRENT TIME
      END-EXEC.
    • 変更

      EXEC SQL
         SELECT TO_CHAR(SYSDATE,’HH24.MI.SS’)
         INTO :[Host Variable] FROM DUAL
      END-EXEC.
  • VALUE関数

    • Case 1

      • タイプ

        SELECT VALUE(MAX([DB Column],’’)/VALUE(MIN([DB Column]),’’)
      • 変更

        SELECT NVL(MAX([DB Column]),’’)/NVL(MIN([DB Column]),’’)
    • Case 2

      • タイプ

        SELECT VALUE(SUM([DB Column]),0)
      • 変更

        SELECT NVL(SUM([DB Column]),0)
  • DECIMAL関数

    • Case 1

      • タイプ

        SELECT VALUE(SUM([DB Column]),DECIMAL(0,15,0))
      • 変更

        SELECT NVL(SUM([DB Column]),0)
    • Case 2

      • タイプ

        SELECT VALUE(DECIMAL(0,15,0),SUM([DB Column]))
      • 変更

        SELECT NVL(0,SUM([DB Column]))
    • Case 3

      • タイプ

        SELECT VALUE(MAX([DB Column]),DECIMAL(‘’,15,‘’))
      • 変更

        SELECT NVL(MAX([DB Column]),’’)
  • INCLUDE SQLCA

    SQLCABC/SQLERRML/SQLERRDを使用するが、INCLUDE SQLCAが指定されていない場合は、WORKING-STORAGE SECTIONに次の構文を挿入する必要があります。

    EXEC SQL INCLUDE SQLCA END-EXEC.
  • SQLCODE DISPLAY

    デバッグ・モードでコンパイルする際、コンパイル対象ソースのSQL文に次の構文を挿入します。

    DISPLAY ‘[SOURCE NAME]:LINE:[LINE NO]:[I/U/D/S]:SQLCODE:[SQLCODE]’.
    項目 説明

    SOURCE NAME

    デバッグ・モードを適用するソース名です。

    LINE NO

    DISPLAY文を挿入する行番号です。

    I/U/D/S

    INSERT/UPDATE/DELETE/SELECTを示します。

    SQLCODE

    実行結果のSQLコードです。