CAF の TRANSLATE 機能

TRANSLATE関数は、失敗したOPENリクエストの Db2 16進数のエラー理由コードを、SQLエラーコードと印刷可能なエラーメッセージテキストに変換します。 Db2 SQLCODEとSQLSTATEのホスト変数、または呼び出し元のSQLCAの関連フィールドに情報を格納します。

変換されたDb2エラー理由コードは、レジスター 0から読み取られます。 TRANSLATE関数は、TRANSLATE要求が失敗しない限り、レジスター0および15の内容を変更しません。 その場合、レジスタ0はX'C10205 'に設定され、レジスタ15は200に設定されます。

TRANSLATE 機能を使用する場合と使用しない場合については、次に示す規則と推奨情報を考慮してください。
  • TRANSLATE 機能は、FORTRAN 言語から呼び出せません。
  • TRANSLATE 機能は、失敗した OPEN 要求の前に明示 CONNECT 呼び出しを使用していた場合のみ役に立ちます。 SQL 要求や IFI 要求の処理時にエラーが発生した場合、TRANSLATE 機能が自動的に実行されます。
  • TRANSLATE 機能は X'00F3' で始まるコードを変換できますが、X'00C1' で始まる CAF 理由コードは変換できません。

OPEN 要求後に、エラー理由コード X'00F30040' (リソース使用不能) を 受け取った場合、TRANSLATE 機能は、使用不能データベース・オブジェクトの名前を SQLERRM フィールドの最後の 44 文字に入れて戻します。

TRANSLATE関数がエラー理由コードを認識しない場合、SQLCODE -924(SQLSTATE '58006')を返し、元のDb2関数コードと戻りおよびエラー理由コードの印刷可能なコピーをSQLERRMフィールドに入れます。

次の図は、TRANSLATE 機能 の構文です。

DSNALI TRANSLATE 機能

構文図を読むビジュアルシンタックスダイアグラムをスキップするCALL DSNALI(機能、sqlca ,RETCODE,リアスコード )
パラメーターは、以下の区域を指し示します。
機能
TRANSLATE という語と、それに続く 3 個のブランクからなる 12 バイト域。
エスキューエルシーエー
プログラムの SQL 連絡域 (SQLCA)。
リターンコード
CAF が戻りコードを入れる 4 バイト域。

このフィールドはオプションです。 retcode を指定しない場合、CAF は戻りコードをレジスター 15 に、理由コードをレジスター 0 に入れます。

リアスコード
CAF が理由コードを入れる 4 バイト域。

このフィールドはオプションです。 reascode を指定しない場合、CAF は理由コードをレジスター 0 に入れます。 reascode を指定した場合には、retcode も指定する必要があります。

CAF TRANSLATE 呼び出しの例

次の表に、各言語の TRANSLATE 呼び出しを示します。
表 1. CAF TRANSLATE 呼び出しの例
言語 呼び出しの例
アセンブラー
CALL  DSNALI,(FUNCTN,SQLCA,RETCODE, REASCODE)
C1
fnret=dsnali(&functn[0], &sqlca, &retcode, &reascode);
COBOL
CALL  'DSNALI' USING FUNCTN SQLCA RETCODE REASCODE.
PL/I1
CALL  DSNALI(FUNCTN,SQLCA,RETCODE, REASCODE);
注:
  • DSNALI はアセンブラー言語プログラムであるため、C および PL/I アプリケーションに対しては、適切なコンパイラー指示を含める必要があります。 これらのコンパイラー指示については、CAF 呼び出しの説明中に記載されています。