proc*c 中1403问题?

JasLi 2003-03-02 03:33:14
有一段代码:
/* check if the rec exists */
if( caMeterNo[0] == 0x00 && caAccNo[0] != 0x00 )
{
/* organize where sub clause */
memset( s_caAccNo, 0, sizeof( s_caAccNo) );
memcpy( s_caAccNo, caAccNo, strlen(caAccNo) );

sprintf( g_caMsg, "[info] 帐号是 [%s] ", s_caAccNo );
ErrLog( 3000, g_caMsg, RPT_TO_LOG, NULL, 0 );

/* declare a cursor */
EXEC SQL
DECLARE c_rec CURSOR FOR
SELECT elecdevnum, accno, address
FROM elecrec
WHERE ACCNO = :s_caAccNo;

}else if( caAccNo[0] == 0x00 && caMeterNo[0] != 0x00 )
{
/* organize where sub clause */
memset( s_caMeterNo, 0, sizeof( s_caMeterNo) );
memcpy( s_caMeterNo, caMeterNo, 10 );

/* declare a cursor */
EXEC SQL
DECLARE c_rec CURSOR FOR
SELECT elecdevnum, accno, address
FROM elecrec
WHERE ELECDEVNUM = :s_caMeterNo;
}
......

for( ;; )
{

EXEC SQL FETCH c_rec INTO .....;
.......
}

碰到了奇怪的现象:如果程序进入第一个if开cursor, fetch 的结果正确,如果程序进入第二个if,fetch的结果是1403...,哪位知道是什么原因?

...全文
155 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cao_elsie 2003-04-03
  • 打赏
  • 举报
回复
第二个if中没有符合条件的记录,不过最好在DECLARE c_rec CURSOR 后判断sqlca.sqlcode,看是不是出错了
coolmother 2003-04-03
  • 打赏
  • 举报
回复
你把程序全贴上我来修改
coolmother 2003-04-03
  • 打赏
  • 举报
回复
还有我没有看到你程序中的open cursor
coolmother 2003-04-03
  • 打赏
  • 举报
回复
在DECLARE cursor前
sqlca.sqlcode=0;

在DECLARE cursor后
增加if(sqlca.sqlcode)
jlus 2003-04-03
  • 打赏
  • 举报
回复
1403错误是因为程序没有找到数据。
JasLi 2003-03-02
  • 打赏
  • 举报
回复
我知道这种情形通常会用动态SQL,但用静态的出错错在哪里呢?

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧