| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 579 人关注过本帖
标题:PRO*C程序每次FETCH100行,惯用法是如何实现的?
只看楼主 加入收藏
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:3 
PRO*C程序每次FETCH100行,惯用法是如何实现的?
程序代码:
#include<stdio.h>
EXEC SQL INCLUDE sqlca;

void sqlerror();
int main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
        char *uid="scott/scott@testdb";
        unsigned empno;
        char ename[11];
        double sal;
EXEC SQL END DECLARE SECTION;

EXEC SQL WHENEVER SQLERROR DO sqlerror();

EXEC SQL CONNECT :uid;

EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT empno,ename,sal from emp;
EXEC SQL OPEN emp_cursor;
while(1){
EXEC SQL WHENEVER NOT FOUND DO BREAK;
EXEC SQL FETCH emp_cursor INTO :empno,:ename,:sal;  //这里每次只fetch一行,想每次fetch100行的话,惯用法是什么?
fprintf(stdout,"%d %s %lf\n",empno,ename,sal);
}
EXEC SQL CLOSE emp_cursor;
        exit(0);
}
void sqlerror()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
fprintf(stderr,"sqlcode=%d\n%-70s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
exit(1);
}
具体要求请参看程序注释处,我想知道惯用法是怎样的?
搜索更多相关主题的帖子: 如何 
2011-08-21 12:34
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:7 
FETCH 貌似只能取一行
2011-08-21 12:38
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
没人搞这个的?方法是有 只是我想知道惯用法是如何的?
2011-08-21 14:21
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
程序代码:
#include<stdio.h>
EXEC SQL INCLUDE sqlca;

void sqlerror();
int main(void)
{
   const int N = 3; //3条记录3条记录的取,表中一共13条记录
   EXEC SQL BEGIN DECLARE SECTION;
   char username[8];
   char password[8];
   char sid[8];
   struct Emp {
      unsigned empno;
      char ename[11];
      double sal;
   } stEMP[N];//如果以动态形式分配,则一次只能取一条

   EXEC SQL END DECLARE SECTION;

   strcpy(username, "scott");
   strcpy(password, "scott");
   strcpy(sid, "testdb");
   EXEC SQL WHENEVER SQLERROR DO sqlerror();

   EXEC SQL CONNECT:username IDENTIFIED BY:password USING:sid;

   EXEC SQL DECLARE emp_cursor CURSOR FOR
   SELECT empno,ename,sal from emp;
   EXEC SQL OPEN emp_cursor;
   EXEC SQL WHENEVER NOT FOUND DO BREAK;//当fetch的记录数小于数组的维数时(这里也就是数组元素的个数),会报not found
   int i,count;
   while(1){
   i=sqlca.sqlerrd[2];
        fprintf(stdout,"i=%d\n",i);
   EXEC SQL FETCH emp_cursor INTO :stEMP;
   printf("sqlca.sqlerrd[2]=%d\n",sqlca.sqlerrd[2]);
   for (count = 0; count < sqlca.sqlerrd[2]-i; count++)
      fprintf(stderr, "%d %s %.2lf\n", stEMP[count].empno, stEMP[count].ename,
              stEMP[count].sal);
   }
   for (count = 0; count < sqlca.sqlerrd[2]-i; count++)//不执行此句则结果不全
      fprintf(stderr, "%d %s %.2lf\n", stEMP[count].empno, stEMP[count].ename,
              stEMP[count].sal);
   EXEC SQL CLOSE emp_cursor;
   exit(0);
}

void sqlerror()
{
   EXEC SQL WHENEVER SQLERROR CONTINUE;
   fprintf(stderr, "sqlcode=%d\n%-70s\n", sqlca.sqlcode,
           sqlca.sqlerrm.sqlerrmc);
   exit(1);
}
上面是一个方法,只是不知道是不是惯用法,是通过数组实现的。
另外也希望回帖的人能够负点责任。
2011-08-27 18:36
快速回复:PRO*C程序每次FETCH100行,惯用法是如何实现的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031554 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved