プロが教えるわが家の防犯対策術!

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ではエラーになるのでしょうか?

A 回答 (1件)

>実行すると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
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2005/05/18 08:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す