免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3393 | 回复: 9
打印 上一主题 下一主题

esqlc中能否把游标的作用域限制在函数内? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-04 10:01 |只看该作者 |倒序浏览
如题
编译时的 -local选项只能使游标的作用域限制在文件内
而我的一个文件中有多个函数, 而每个函数中都有游标

谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-09-04 13:15 |只看该作者
自己回复吧!

informix的esqlc使用静态常量处理游标,所以不能将游标的作用域限制在函数内部(局部)

论坛徽章:
0
3 [报告]
发表于 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下很方便吧

论坛徽章:
0
4 [报告]
发表于 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 : ...



呵呵,好灵活的方法!学到了,谢谢!

论坛徽章:
0
5 [报告]
发表于 2008-09-07 19:08 |只看该作者
啊,你们是高人啊,我怎么看不懂那个例子?能否详细解释一下。

论坛徽章:
0
6 [报告]
发表于 2008-09-07 19:25 |只看该作者
ec的东西大部分是不需要解释的吧
1,照这个例子做,实际的测试一下
2,看看ec预编译的结果
3,查一下手册

这样印象会深刻些。

简要的来说,就是用变量游标替代literal的游标。省却的仅仅是每次给游标起名字的麻烦。没有其他的意思。嗯。。。大部分情况下,游标是没有必要起一个有意义的名字的。它仅仅是辅助你获取数据的手段。

论坛徽章:
0
7 [报告]
发表于 2008-09-08 11:59 |只看该作者
难道 char *cur = __func__;这行中__func__就是本函数名?还是其他意思?在每个函数体内__func__都是不同的?

论坛徽章:
0
8 [报告]
发表于 2008-09-08 21:44 |只看该作者
嗯嗯。__func__被C编译器处理后,就是__func__所在函数的函数名。
同一个文件中函数名字,对于C来说,肯定是不同的。所以cursor的名字肯定不会重复。
在informix下使用,这点非常方便。

论坛徽章:
0
9 [报告]
发表于 2008-09-18 08:22 |只看该作者
我在编译的时候报错

Undeclared identifier __func__



包含了stdio.h和stdlib.h

换成__FUNCTION__就可以了

[ 本帖最后由 happer_xc 于 2008-9-18 08:58 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-09-18 08:43 |只看该作者
你的编译器版本太低的缘故
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP