sql - 我们如何删除C中的SQL错误代码1405

标签 sql c oracle error-handling

我用 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 个基本选项:

  1. 使用指示器来记录 NULL 的存在。当您希望在出现 NULL 时执行特定操作时,您可能应该使用此选项。
  2. 使用 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/

相关文章:

mysql - #1411 - INSERT INTO...SELECT 函数 str_to_date 的日期时间值不正确

java - JPA 为什么返回 2 个对象的查询不起作用而返回 1 个对象的查询工作正常

c - 使用数据镜像保护数据损坏

sql 查询喜欢在列表顶部订购精确匹配

oracle - 如何美化来自命令提示符中 SELECT 查询的输出?

java - Java Servlet 中的 DBMS_ALERT 用法

Mysql 仅使用一张表来统计每个奖杯的条目总数

c# - 如果使用 Entity Framework ,如何简化

c - 在 C 中处理结构数组

c - SIP用户代理与SIP服务器连接的信息(Opensip)