2

我用 C 编写了以下代码:

EXEC SQL begin declare section;
    int     A;
    char    B[5];
    int     C;
    int     D;
    dtime_t E;
    char    F[13];
EXEC SQL END DECLARE SECTION;
char E_dt[16];
D=0;
memset(F, 0, sizeof(F));          

EXEC SQL declare log3 cursor for select A, B, C, D, E, F from tbl WHERE C=123;
if(sqlca.sqlcode) 
{
    return;
}

EXEC SQL fetch log3
    into
     :A, :B, :C, :D, :E, :F, 
if(sqlca.sqlcode) 
{
    if (sqlca.sqlcode != DB_NORECORDS) 
    {
        return;
    }
    break;
}

当我们运行这段代码时,表 tbl 中 F 的值为 Null。它给出了错误代码 1405。我尝试使用 memset 函数将其默认值设置为 0。但它不起作用。还有一件事我可以一次获取超过 90 个字段,当我试图这样做时,它在编译时给了我总线错误。提前谢谢请帮帮我。

4

1 回答 1

3

您有 2 个基本选项:

  1. 使用指示器来记录 NULL 的存在。当您希望在出现 NULL 时采取特定操作时,您可能应该使用此选项。
  2. 使用 NVL 函数将检索到的 NULL 转换为另一个值,例如零或空白。这是最简单的解决方案。

编辑:

log3 游标的 NVL 示例。选择您想要的任何默认值。在示例中,我使用 ' ' 表示字符字段,使用 0 表示数字字段,使用 Jan 1st year 1 表示日期。

EXEC SQL declare log3 cursor for select NVL(A, 0), 
                                        NVL(B, ' '), 
                                        NVL(C, 0), 
                                        NVL(D, 0), 
                                        NVL(E, to_date('0001', 'YYYY')),
                                        NVL(F, ' ')
                                   from tbl 
                                  WHERE C=123;
于 2012-09-18T08:01:39.003 回答