-802 EXCEPTION ERROR exception-type HAS OCCURRED DURING operation-type OPERATION ON data-type DATA, POSITION position-number
説明
SQL 算術関数または算術式の処理で、 例外エラーが発生しました。 例外エラーは、以下のいずれかの領域で発生しました。
- SQL SELECT ステートメントの SELECT リストにおいて。
- SELECT、UPDATE、MERGE、または DELETE ステートメントの検索条件において。
- UPDATE 操作の SET 文節において。
- 集約関数の計算中。
エラーの検出場所によっては、exception-type、operation-type、data-type、 および position-number の一部が SQL 連絡域に戻されない場合があります。
- exception-type
- エラーのタイプを示します。
exception-type の値は次のとおりです。
- FIXED POINT OVERFLOW
- DECIMAL OVERFLOW
- ZERO DIVIDE
- DIVIDE EXCEPTION
- EXPONENT OVERFLOW
- INVALID OPERATION
- SUBNORMAL
- UNDERFLOW
- OVERFLOW
- OUT OF RANGE
- operation-type
- エラー発生時に実行されていた操作を示します。operation-type には、以下の算術演算が返されます。
- ADDITION
- SUBTRACTION
- MULTIPLICATION
- DIVISION
- NEGATION
また、operation-type は、以下のいずれかの操作である可能性があります。
- 組み込み関数
- 集約関数
- Java 変換
- data-type
- 操作されている項目のデータ・タイプ。
data-type には以下のデータ・タイプが返されます。
- BIGINT
- INTEGER
- SMALLINT
- DECIMAL
- FLOAT
メッセージに表示されるデータ・タイプは、データの一時的な内部コピーのデータ・タイプを示すことがあり、Db2® による変換のために実際の列またはリテラルのデータ・タイプとは違っていることがあります。
- position-number
- エラーの場所が外部の SELECT ステートメントの SELECT リスト内にあった場合は、SELECT リスト内の式の位置。
システムの処置
このステートメントを処理することはできません。 挿入または更新操作の場合、データの更新または削除は行われません。ステートメントがカーソル制御の FETCH であった場合は、集約関数の処理の間に 例外が発生しない限り (AGGREGATE FUNCTION の operation-type によって示される)、カーソルはオープンのままになります。例外が発生した場合、カーソルはクローズします。カーソルが クローズされて、その後そのカーソルに対する OPEN を行わずに使用とすると SQLCODE -501 が出されます。ステートメントがカーソル制御の OPEN である場合、カーソルはクローズされたままになります。
プログラマーの応答
SQL ステートメントを検査して、問題の原因を判別できるかどうかを調べてください。 問題がデータから生じていることがあります。その場合は、エラーの発生時に処理中であったデータを調べる必要があります。
エラーの算術式が、外部 SELECT ステートメントの SELECT リスト内にあった場合は、すべての式の標識変数を SELECT リストに含めることをお勧めします。 これにより、処理は継続し、したがってエラーでない列と式の値を戻すことができます。
数字データ・タイプの許容範囲については、SQLCODE -405 の説明を参照してください。
問題判別
固定小数点オーバーフローは、BIGINT、INTEGER または SMALLINT フィールドに算術演算を行っているときに起こることがあります。
除算例外は、10 進数の除算において、 商が指定されたデータ・フィールドのサイズを超えたときに起こることがあります。 ゼロ除算例外は、ゼロで除算を行った場合に起こります。
指数オーバーフローは、浮動小数点演算の結果の指数部が 127 を超え、 結果の小数部がゼロでない場合 (例えば、結果の絶対値が およそ 7.2E+75 を超える場合) に起こることがあります。
10 進オーバーフロー例外は、以下のいずれかの環境で起こる可能性があります。
- 10 進演算の宛先フィールドが短すぎて 結果を収容しきれないため、1 つ以上の非ゼロの桁が失われている。
- Java ストアード・プロシージャーまたは、ユーザー定義関数が 出力パラメーターに 10 進数値を設定したが、その精度または位取りが、値に対して小さすぎる。 operation-type は Java 変換です。data-type は DECIMAL です。 position-number は、CALL ステートメントまたはユーザー定義関数の呼び出しでどのパラメーターがエラーになったかを示します。
組み込み関数の処理中になんらかの例外あるいはオーバーフローが発生する場合があります。operation-type が FUNCTION である場合は、入力値、中間値、または最終値を処理中にエラーが発生しています。パラメーターの値が範囲外であるため、例外が発生することがあります。
SQLSTATE
ZERO DIVIDE ならば 22012。
ZERO DIVIDE 以外ならば 22003。