Oracle データベースのテーブルからいくつかのレコードを取得しています。私のプログラムはいくつかのレコードを取得できますが、後でエラーを表示せずに突然停止します。
以下のコードを確認してください
void fetch_data()
{
char tran_dt[16];
trace("fetch_data(): Begin");
EXEC SQL declare log3 cursor for select NVL(type_code,0),
NVL(pri_tran_code,' '),
NVL(tran_datetime,to_date('0001','YYYY')),
from log_record
WHERE sys_seq_nbr=:next_sys_seq_nbr1 and
tran_datetime = :last_tran_datetime1;
dttostr(tran_dt, &last_tran_datetime1);
sprintf(str, "fetch_data(): tran date time of last ssn (%d): (%s)", next_sys_seq_nbr1, tran_dt);
trace(str);
trace("fetch_data(): Before open log3");
EXEC SQL open log3;
if(sqlca.sqlcode)
{
printf("Error : sqlcode(%d) for open log3\n", sqlca.sqlcode);
sprintf(str, "(%d) for open log3\0",sqlca.sqlcode);
trace(str);
error(str);
return;
}
printf("fetch_data(): After open log3");
for(;;)
{
trace("fetch_data(): Before fetch log3");
EXEC SQL fetch log3
into
:type_code, :pri_tran_code, :tran_datetime;
if(sqlca.sqlcode)
{
if (sqlca.sqlcode != DB_NORECORDS)
{
trace("Error : sqlcode(%d) for fetch log3\n", sqlca.sqlcode);
sprintf(str, "fetch_data() : Error : sqlcode(%d) for fetch log3\0", sqlca.sqlcode);
trace(str);
error(str);
return;
}
break;
}
}
trace("fetch_data(): After fetch log3");
EXEC SQL CLOSE log3;
}
関数trace()とerror()は、パラメータとして渡された文字列をそれぞれのテキスト ファイルに書き込みます。したがって、テキスト ファイルに最後に書かれているのは、「fetch_data(): Before open log3」です。カーソルを開いたときに問題が発生した場合は、 if(sqlca.sqlcode)によってキャッチされているはずではありません。
問題がどこにあるかを見つけるのを手伝ってください。ありがとう。