1

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)によってキャッチされているはずではありません。

問題がどこにあるかを見つけるのを手伝ってください。ありがとう。

4

0 に答える 0