如何在C程序中执行嵌入式SQL命令时发生错误?

时间:2013-01-22 08:11:55

标签: c embedded-sql

我从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)捕获。

请帮我找出问题所在。 感谢。

0 个答案:

没有答案