こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

pro*c で pl/sql に変数を渡すとora-01458発生

oracle初心者です。よろしくお願いします。

oracleのバージョンは 10.1.0.2.0
開発言語はpro*c pl/sql です。

テキストファイルを処理するAPを作成しています。
ディレクトリオブジェクト名を、pro*cからpl/sqlを呼び出す際に変数として渡していますが、実行するとora-01458エラーが発生してしまいます。
pro*cのコーディングは以下の通りです。

EXEC SQL BEGIN DECLARE SECTION;
char Pass[50+1];
char Txtnm[20+1];
int nStatus;
VARCHAR vErrMsg[100+1];
VARCHAR vErrCode[10+1];
EXEC SQL END DECLARE SECTION;

ZeroMemory( Pass, sizeof( Pass ) );
strcpy( Pass, "DIR_A" );
ZeroMemory( Txtnm, sizeof( Txtnm) );
strcpy( Txtnm, "TEST.txt" );

EXEC SQL EXECUTE
BEGIN
 proc9999( :Pass, :Txtnm, :nStatus, :vErrMsg, :vErrCode );
END;
END-EXEC;

しかし、このpl/sqlをsqlplusから下記の内容で実行すると正常に動作します。

DECLARE
in_file_dirVARCHAR2(255):='DIR_A';
in_file_nameVARCHAR2(255):='TEST.txt';
io_stsnumber;
io_msgVARCHAR2(255);
io_msgcdVARCHAR2(10);
BEGIN
PROC9999( in_file_dir, in_file_name, io_sts, io_msg, io_msgcd );
END;

同じことをしていると思うのですが何故pro*cではエラーになるのでしょうか?

投稿日時 - 2005-05-17 18:52:05

QNo.1393488

暇なときに回答ください

質問者が選んだベストアンサー

>実行するとora-01458エラーが発生してしまいます。

このエラーコードの意味は自分で調べましたか?
「可変長文字列の長さが無効です。」です。

http://otn.oracle.co.jp/document/msg/index.html
#要ユーザ登録(無料)

vErrMsg.lenとか初期化してないですよね。100+1より大きな不正な値が入ってるんじゃないですか?

参考URL:http://otn.oracle.co.jp/document/msg/index.html

投稿日時 - 2005-05-17 20:33:48

お礼

回答ありがとうございます。

ご指摘の通りvErrMsg,vErrCodeの初期値がまずかったようで、修正後すんなり正常動作しました。

今回初めてこのサイトを利用させていただきましたが、初回から大ヒットです。今後活用させていただくよいきっかけになりました。

投稿日時 - 2005-05-18 08:36:21

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問