Chinaunix

标题: esqlc中能否把游标的作用域限制在函数内? [打印本页]

作者: novemberrain    时间: 2008-09-04 10:01
标题: esqlc中能否把游标的作用域限制在函数内?
如题
编译时的 -local选项只能使游标的作用域限制在文件内
而我的一个文件中有多个函数, 而每个函数中都有游标

谢谢!
作者: novemberrain    时间: 2008-09-04 13:15
自己回复吧!

informix的esqlc使用静态常量处理游标,所以不能将游标的作用域限制在函数内部(局部)
作者: ivhb    时间: 2008-09-04 22:25
我一般是
exec sql begin declare section;
   char *cur = __func__;
exec sql end declare section;

exec sql declare :cur cursor for ....
exec sql open :cur;

for (;;) {
   exec sql fetch :cur into :...
   if (SQLCODE)
       break;
}
if (SQLCODE < 0)
   ...
exec sql close :cur;

....



在informix下很方便吧
作者: novemberrain    时间: 2008-09-07 15:02
原帖由 ivhb 于 2008-9-4 22:25 发表
我一般是
exec sql begin declare section;
   char *cur = __func__;
exec sql end declare section;

exec sql declare :cur cursor for ....
exec sql open :cur;

for (; {
   exec sql fetch : ...



呵呵,好灵活的方法!学到了,谢谢!
作者: xxyyy    时间: 2008-09-07 19:08
啊,你们是高人啊,我怎么看不懂那个例子?能否详细解释一下。
作者: ivhb    时间: 2008-09-07 19:25
ec的东西大部分是不需要解释的吧
1,照这个例子做,实际的测试一下
2,看看ec预编译的结果
3,查一下手册

这样印象会深刻些。

简要的来说,就是用变量游标替代literal的游标。省却的仅仅是每次给游标起名字的麻烦。没有其他的意思。嗯。。。大部分情况下,游标是没有必要起一个有意义的名字的。它仅仅是辅助你获取数据的手段。
作者: xxyyy    时间: 2008-09-08 11:59
难道 char *cur = __func__;这行中__func__就是本函数名?还是其他意思?在每个函数体内__func__都是不同的?
作者: ivhb    时间: 2008-09-08 21:44
嗯嗯。__func__被C编译器处理后,就是__func__所在函数的函数名。
同一个文件中函数名字,对于C来说,肯定是不同的。所以cursor的名字肯定不会重复。
在informix下使用,这点非常方便。
作者: happer_xc    时间: 2008-09-18 08:22
我在编译的时候报错

Undeclared identifier __func__



包含了stdio.h和stdlib.h

换成__FUNCTION__就可以了

[ 本帖最后由 happer_xc 于 2008-9-18 08:58 编辑 ]
作者: ivhb    时间: 2008-09-18 08:43
你的编译器版本太低的缘故




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2