開発時に発生するエラー
ORA-06502: PL/SQL: 数値または値のエラーが発生しました (その1)
ORA-06502 と数値の組み合わせの場合によくあるエラーが NULL のハンドリングが不足していることに起因するエラー。
例えば以下のソースコードでシンプルに再現できる。ただ実際の開発では難解な処理と NULL データの特殊性から
テストをすり抜けて不正なデータが入力されるまで何事もなく眠っていることも少なくない。
実行結果
SQL> CALL ORA_06502_NUM();
a
b
c
CALL ORA_06502_NUM()
*
行1でエラーが発生しました。:
ORA-06502: PL/SQL: 数値または値のエラーが発生しました
ORA-06512: "RIVUS.ORA_06502_NUM", 行14
ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます (その2)
- プロシージャの入力パラメータのスケールを超えた文字列長を代入している場合やプログラムが移植されたかキャラクタセットが想定しているものと違う場合に発生する。
新しい環境に移植した場合などにはキャラクタセットの違いにより文字列長のバイトサイズが異なることで発生する。
参考: 文字コード・キャラクタセット / NLS_LENGTH_SEMANTICS
この例はデータベースキャラクタセットが Shift-JIS で作成されたデータベースでの実験
実行結果
SQL> CALL ORA_06502_CHAR();
2バイト
戓
CALL ORA_06502_CHAR()
*
行1でエラーが発生しました。:
ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました
ORA-06512: "RIVUS.ORA_06502_CHAR", 行12
関連事項
一覧ページへ戻る
OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。