HomeORACLEORACLE エラーコード ORA-06502:式がありません。 が表示される原因と対応

ORACLE エラーコード ORA-06502:式がありません。 が表示される原因と対応について記載しています。

ORA-06502: PL/SQL: 数値または値のエラーが発生しました

ORA-06502エラーは、ORACLEのPL/SQLにおいて
変数にNULLがセットされているが、NULLが格納されていることを考慮できていない場合に発生します。
Javaで言うところのNullPointerExceptionのようなものです。

例えば、以下のようなコードを書くと発生します。

CREATE OR REPLACE PROCEDURE RIVUS.SAMPLE_ORA_06502_NG
IS
vStr VARCHAR2(10);

BEGIN

vStr := NULL;
FOR i in 1 .. LENGTH(vStr) LOOP   -- vStrはNULLであるため、LENGTH(NULL)もNULL

-- ここでORA-06502エラー発生!!
DBMS_OUTPUT.PUT_LINE(SUBSTR(vStr,i,1));

END LOOP;
END;
/

以下のように、NULL判定を行なうことと
値を設定してやることで、エラーを防ぐことができます。

CREATE OR REPLACE PROCEDURE RIVUS.SAMPLE_ORA_06502_OK
IS
vStr VARCHAR2(10);

BEGIN

vStr := 'abc';

-- vStrのNULLチェックを行なうことで万全に
IF vStr IS NULL THEN
DBMS_OUTPUT.PUT_LINE('NULLデータ');
ELSE
FOR i in 1 .. LENGTH(vStr) LOOP -- abcと値がセットされているのでLENGTH(vStr)は3
-- 正常に数値、値がセットされているため、ORA-06502エラーは発生しない
DBMS_OUTPUT.PUT_LINE(SUBSTR(vStr,i,1));
END LOOP;
END IF;
END;
/

PL/SQLを書く方は、開発途中に発生させてしまうことの多いのが
このORA-06502エラーではないかと思います。

実際の開発でORA-06502エラーが発生するケースは、
上記のvStrの値として、データベース(DB)のデータを取得し用いる際に
システムとしては、DBのテーブルのそのカラムにデータが存在することを想定しているが
何らかのエラー(データ移行時やシステムのINSERT/UPDATE実装ミス)により
NULLが格納されていた(何も格納されていなかった)というケースに発生するのが
ORA-06502エラーだと思います。

適切なNULL判定(NULLチェック)を行なうことで回避できるものだと思います。

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます

プロシージャの入力パラメータのスケールを超えた文字列を代入している場合や
プログラムが移植されたかキャラクタセットが想定していない場合に発生します。
例えば、以下のコードでデータベースキャラクタセットがShift-JISで作成されたデータベースで発生します。
CREATE OR REPLACE PROCEDURE RIVUS.SAMPLE_ORA_06502_CHAR_NG
IS
vCharStr VARCHAR2(1 CHAR);
vByteStr VARCHAR2(2);

-- vByteStr VARCHAR2(3);
BEGIN
vCharStr := '・ス'; -- EUC 3 Byte Code
DBMS_OUTPUT.PUT_LINE(lengthb(vCharStr) || 'バイト');
DBMS_OUTPUT.PUT_LINE(vCharStr);

-- SJIS では 2バイト であるが EUC では 3バイト必要になる
vByteStr := convert(vCharStr,'ja16euc');
DBMS_OUTPUT.PUT_LINE(lengthb(vByteStr) || 'バイト');
END;
/

上記の

vByteStr := convert(vCharStr,'ja16euc');

で、ORA-06502エラーが発生してしまいます。

同じORA-06502エラーでも、こちらはデータ依存で発生してしまうことが多いです。
文字コードをconvertさせる際には注意が必要です。

ページトップへ

トピックアップ メニュー

トピックアップ リンク

Copyright (C) トピックアップ All Rights Reserved.
inserted by FC2 system