proc编译报a break statement may only be used within a loop or switch,急求解决

chfwxy 2010-03-07 10:12:12
我写的一个proc程序在编译时报以下错误:
error #2116: a break statement may only be used
within a loop or switch
if (sqlca.sqlcode == 1403) break;

对应程序中的报错代码是一个查询语句:EXEC SQL select。。。。。;

在预编译的时候没报错,但是这行对应的预编译后的程序中多了行 if (sqlca.sqlcode == 1403) break ,所以在编译的时候报错

请教下出现这种情况可能是什么原因。
...全文
2371 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二进制浮游 2011-08-22
  • 打赏
  • 举报
回复
路过............
cattycat 2010-03-07
  • 打赏
  • 举报
回复
你是嵌入的SQL编程?预编译自动加的这个if语句吗?我估计这个是判断中间执行状态结果的,如果出错就break,但还是要在循环中才break。能出现这个说明你的SQL写的不对。
chfwxy 2010-03-07
  • 打赏
  • 举报
回复
if (sqlca.sqlcode == 1403) break 这个语句是proc预编译自动生成的,
proc源码是:
EXEC SQL select substr(BELONG_CODE,0,2)
INTO :vReginCode
FROM dcustmsg
WHERE id_no = :lServId;
象这种语句预编译之后的代码不应该有“if (sqlca.sqlcode == 1403) break”。但是现在预编译后的代码种出现这句话,所以在编译的时候报错。
预编译后的代码是:
{
#line 2169 "pubProdFunc.cp"
struct sqlexd sqlstm;
#line 2169 "pubProdFunc.cp"
sqlstm.sqlvsn = 12;
#line 2169 "pubProdFunc.cp"
sqlstm.arrsiz = 17;
#line 2169 "pubProdFunc.cp"
sqlstm.sqladtp = &sqladt;
#line 2169 "pubProdFunc.cp"
sqlstm.sqltdsp = &sqltds;
#line 2169 "pubProdFunc.cp"
sqlstm.stmt = "select substr(BELONG_CODE,0,2) into :b0 from dcustmsg wher\
e id_no=:b1";
#line 2169 "pubProdFunc.cp"
sqlstm.iters = (unsigned int )1;
#line 2169 "pubProdFunc.cp"
sqlstm.offset = (unsigned int )2158;
#line 2169 "pubProdFunc.cp"
sqlstm.selerr = (unsigned short)1;
#line 2169 "pubProdFunc.cp"
sqlstm.cud = sqlcud0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqlest = (unsigned char *)&sqlca;
#line 2169 "pubProdFunc.cp"
sqlstm.sqlety = (unsigned short)256;
#line 2169 "pubProdFunc.cp"
sqlstm.occurs = (unsigned int )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqhstv[0] = (unsigned char *)vReginCode;
#line 2169 "pubProdFunc.cp"
sqlstm.sqhstl[0] = (unsigned long )3;
#line 2169 "pubProdFunc.cp"
sqlstm.sqhsts[0] = ( int )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqindv[0] = ( short *)0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqinds[0] = ( int )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqharm[0] = (unsigned long )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqadto[0] = (unsigned short )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqtdso[0] = (unsigned short )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqhstv[1] = (unsigned char *)&lServId;
#line 2169 "pubProdFunc.cp"
sqlstm.sqhstl[1] = (unsigned long )sizeof(long);
#line 2169 "pubProdFunc.cp"
sqlstm.sqhsts[1] = ( int )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqindv[1] = ( short *)0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqinds[1] = ( int )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqharm[1] = (unsigned long )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqadto[1] = (unsigned short )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqtdso[1] = (unsigned short )0;
#line 2169 "pubProdFunc.cp"
sqlstm.sqphsv = sqlstm.sqhstv;
#line 2169 "pubProdFunc.cp"
sqlstm.sqphsl = sqlstm.sqhstl;
#line 2169 "pubProdFunc.cp"
sqlstm.sqphss = sqlstm.sqhsts;
#line 2169 "pubProdFunc.cp"
sqlstm.sqpind = sqlstm.sqindv;
#line 2169 "pubProdFunc.cp"
sqlstm.sqpins = sqlstm.sqinds;
#line 2169 "pubProdFunc.cp"
sqlstm.sqparm = sqlstm.sqharm;
#line 2169 "pubProdFunc.cp"
sqlstm.sqparc = sqlstm.sqharc;
#line 2169 "pubProdFunc.cp"
sqlstm.sqpadto = sqlstm.sqadto;
#line 2169 "pubProdFunc.cp"
sqlstm.sqptdso = sqlstm.sqtdso;
#line 2169 "pubProdFunc.cp"
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
#line 2169 "pubProdFunc.cp"
if (sqlca.sqlcode == 1403) break;
#line 2169 "pubProdFunc.cp"
}
cy330206 2010-03-07
  • 打赏
  • 举报
回复
请问楼主为什么在if后面加个break??是什么意思
是不是条件相等时就结束呢??如果是这样的话,那是语法错误一般break是用于跳出循环用的,而不是用在结束的
chfwxy 2010-03-07
  • 打赏
  • 举报
回复
break是预编译之后出现的。
EXEC SQL select。。。。。;
这种语句预编译之后不应该有break,但是现在预编译之后出现多了一条“if (sqlca.sqlcode == 1403) break “ 所以在编译的时候报这个错。

现在的问题是EXEC SQL select。。。。。; 在预编译的时候为什么会多出一条“if (sqlca.sqlcode == 1403) break “
cattycat 2010-03-07
  • 打赏
  • 举报
回复
break应该在循环中出现,上下文中有while循环或for循环才行,if语句直接不能 break。break的作用就是终止循环的。

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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