当然有错误了,在直接open它,fetch它,close它肯定没问题。
问题是你只声明了一次的游标。将声明的语法同样的放在循环中(并且取不同的名称)

解决方案 »

  1.   

    EXEC SQL OPEN SALESPEOPLE;
    EXEC SQL whenever not found do break;
    for(;;)
    {EXEC SQL FETCH SALESPEOPLE
    INTO :SS,:NAME,:SAL;
    }EXEC SQL CLOSE SALESPEOPLE;
    为什么不这么写呢
      

  2.   

    我都傻了,这个示例程序居然也可以fetch到
    #include <sqlca.h> 
    #include <string.h>EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR username[20]; 
    VARCHAR password[20];
    VARCHAR dbname[20];
    int SS;
    VARCHAR NAME[10];
    int     SAL;
    EXEC SQL END DECLARE SECTION;
    void main()
    {

    strcpy((char *)username.arr,"SCOTT");
    username.len = strlen((char *)username.arr);
    strcpy((char *)password.arr,"TIGER");
    password.len = strlen((char *)password.arr);
    strcpy((char *)dbname.arr,"ctc");
    dbname.len = strlen((char *)dbname.arr);
    EXEC SQL WHENEVER SQLERROR STOP; 
    EXEC SQL CONNECT :username 
    IDENTIFIED BY :password USING :dbname;
    if (sqlca.sqlcode != 0) 
    {
      printf("\n与Oracle数据库连接失败!\n"); 
      return;
    }
    EXEC SQL DECLARE SALESPEOPLE CURSOR FOR 
    SELECT EMPNO,ENAME,SAL
    FROM EMP
    WHERE ENAME='KING';
    if (sqlca.sqlcode != 0) 
    {
      printf("\n游标声明失败!\n"); 
      return;
    }
    while(1)
    {
    EXEC SQL OPEN SALESPEOPLE;
    printf("sqlcode:%d\n",sqlca.sqlcode);
    EXEC SQL FETCH SALESPEOPLE
    INTO :SS,:NAME,:SAL;
    printf("SS:%d\nNAME:%s\nSAL:%d\n",SS,(char *)NAME.arr,SAL);
    EXEC SQL CLOSE SALESPEOPLE;
    break;
    }
    }
    但是我的程序就是放在while中去open就会返回sqlcode=-1012,晕了,怎么回事呀?