starorion 发表于 2007-09-19 14:06

精通proc与esqlc的高人请进

EXEC SQL WHENEVER NOT FOUND DO break;


请问这个在ec中用什么代替?

ivhb 发表于 2007-09-19 14:14

EXEC SQL WHENEVER NOT FOUND STOP; ????

starorion 发表于 2007-09-19 14:16

STOP 程序就跳出去不执行了 我只是想跳出循环 好像informix没有break这东西

ivhb 发表于 2007-09-19 14:36

是不是可以

int
__xxx_xxx_my_break()
{
   
}

#define __xxx_xxx_my_break()break
exec sql whenever not found call __xxx_xxx_my_break;
...

没事测试过,不知道是不是可行

starorion 发表于 2007-09-19 14:47

不行. :em06:

用goto也编不过去.


EXEC SQL WHENEVER NOT FOUND goto breakout;
while(1)
{
                .......................
}
breakout:
        EXEC SQL CLOSE cur_ok;


报这样的错:

Error 327: "Colconv.ec", line 3965 # The goto statement specified a
    nonexistent label as its destination.
    { if (SQLCODE == SQLNOTFOUND) goto breakout; }
                                  ^^^^^^^^^^^^^^
Error 327: "Colconv.ec", line 4016 # The goto statement specified a
    nonexistent label as its destination.
    { if (SQLCODE == SQLNOTFOUND) goto breakout; }

starorion 发表于 2007-09-19 14:54

不用这个了,用别的办法.

Thanks for ivhb!

ivhb 发表于 2007-09-19 14:58

informix会把所有的exec sql开头的文句都在其后加上
if (SQLCODE == SQLNOTFOUND)
   ....
这样,如果仅仅是要加上break,不在while,for里面是没有办法做到的。
这样,如果你把每个不是在循环里面的语句。都用
do {
exec sql declare a_cur cursor for ...
exec sql open a_cur;
} while (0);

实际上这些语句永远都不会返回SQLNOTFOUND,因此不会破坏程序逻辑。只是太罗嗦了。
要是程序很多,就麻烦了。

happer_xc 发表于 2007-09-25 06:27

这个是存储过程中的用法,在ec中不能直接使用
页: [1]
查看完整版本: 精通proc与esqlc的高人请进