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():在打开 log3 之前”。如果我们打开游标有什么问题,不应该是被if(sqlca.sqlcode)捕捉到了。

请帮我找出问题出在哪里。谢谢。

4

0 回答 0