我用 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 个字段,当我试图这样做时,它在编译时给了我总线错误。预先感谢,请帮助我。
最佳答案
您有 2 个基本选项:
- 使用指示器来记录 NULL 的存在。当您希望在出现 NULL 时执行特定操作时,您可能应该使用此选项。
- 使用 NVL 函数将检索到的 NULL 转换为另一个值,例如零或空白。这是最简单的解决方案。
编辑:
log3 游标的 NVL 示例。选择您想要的任何默认值。在示例中,我使用“”表示字符字段,使用 0 表示数字字段,使用 Jan 1styear 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;
关于sql - 我们如何删除C中的SQL错误代码1405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472229/