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コードです。