if (userRequest = "A") try add record1; onException myErrorHandler(12); end end
一般に、try ブロックによって、エラーが生じた場合でもプログラムで処理を継続することができます。
try ブロックには、以前に示した onException 文節 が含まれていることがあります。この文節は、try ブロック内の以前の文のいずれかが失敗した場合に呼び出されますが、onException 文節がない場合は、try ブロック内のエラーによって、その try ブロックの直後の最初の文が呼び出されます。
EGL は、実行時の問題について特定の性質を示すために、一連のシステム例外を備えています。 これらの例外は、それぞれが 1 つの辞書になっており、そこから情報を取り出すことができますが、取り出しには、常にシステム変数 SysLib.currentException (これも辞書) を使用します。この変数により、実行単位内でスローされた最新の例外にアクセスできます。
if (userRequest = "A") try add record1; onException case (SysLib.currentException.code) when (FileIOException) myErrorHandler(12); otherwise myErrorHandler(15); end end end
この場合、FileIOException は「com.ibm.egl.FileIOException」というストリング値に相当する定数です。 EGL 例外定数は常に、「com.ibm.egl」で始まるストリング内の最後の修飾子と等価です。
例外フィールドへのアクセスは、onException ブロック内でのみ行うことを強くお勧めします。 例外が発生しなかったときに、コードが SysLib.currentException にアクセスすると、実行単位は終了します。
if (userRequest = "A") try add record01; onException case (SysLib.currentException.code) when ("com.ibm.egl.SQLException") if (SysLib.currentException.sqlcode == -270) myErrorHandler(16); else myErrorHandler(20); end otherwise myErrorHandler(15); end end end
システム例外の詳細については、『EGL システム例外』を参照してください。
try ブロックの存在によって、数値オーバーフローの処理が影響を受けることはありません。この種のエラーの詳細については、『VGVar.handleOverflow』を参照してください。
if (userRequest = "B") try myVariable = myABC(); onException myErrorHandler(12); end end
EGL は、正常なイベントの応答または終了しないエラーの応答として、try ブロックに設定されたエラー関連システム変数を提供します。これらの変数の値は、try ブロック内およびその try ブロックに後続して実行されるコード内で使用でき、大抵の場合、値は変換後にリストアされます。
CICS® で稼動中の場合、値は CICS DL/I 状況変数 (DLIVar.cicsError、DLIVar.cicsCondition、および DLIVar.cicsRestart) にも割り当てられます。
EGL ランタイムは、コードが GSAM ファイルにアクセスした後、または IMS メッセージ・キュー・アクセスの後は、先にリストした DL/I 関連の変数を設定しません。そのアクセスはシリアル・ファイル・アクセスと見なされます。それらの事例で、追加の状況情報へのアクセスを取得するには、適切な PCB レコードを使用します。概要については、『ランタイム PSB および PCB の EGL サポート』を参照してください。PCB レコードの特定のタイプについての詳細は、『レコード・タイプとプロパティー』を参照してください。
エラー・コードは、『VGVar.handleOverflow』の説明にあるように、無限の数値オーバーフローの場合、sysVar.errorCode に割り当てられます。しかし、正常な算術計算がエラー関連システム変数に影響を与えることはありません。
EGL ランタイムは、文が試行ブロックの外部で実行されるときに、エラー関連変数の値を変更しません。ただし、ユーザーのプログラムは、try ブロック外部のエラー関連変数に値を割り当てることができます。
DL/I との関係では、GA、GB、GD、GE、GK、または II 以外の非ブランク状況コードは、ハード・エラーです。GSAM との関係では、GB 以外の非ブランク状況コードは、ハード・エラーです。 IMS との関係では、QC、QD、CE、CF、 CG、CI、CJ、CK、または CL 以外の非ブランク状況コードはハード・エラーです。
この変数のデフォルト設定は、handleHardIOErrors プロパティーの値によって異なり、このプロパティーは、プログラム、ライブラリー、pageHandler などの生成可能ロジック・パーツの中で使用可能です。 このプロパティーのデフォルト値は yes で、これは、変数 sysVar.handleHardIOErrors の初期値を 1 に設定します。
ハードまたはソフトのいずれかの入出力エラーが try ブロック外部で生じた場合、生成したプログラムは可能な場合はエラー・メッセージを提示してから、終了します。
DB2® に直接アクセスしている場合 (JDBC 経由でなく)、ハード・エラーの sqlcode は 304、802、または 0 より小さい値です。
recordName is IOerrorValue recordName not IOerrorValue
入出力エラー値が指定された論理式を使用しないでデータベース管理システムを変更する場合は、プログラムの変更と再生成が必要になることがあります。特に、sysVar.sqlcode または sysVar.sqlState 内の同等の値ではなく、入出力エラー値を使用して、エラーの有無をテストすることをお勧めします。、それらの値は、基盤となるデータベース実装によって異なります。