我做了个程序,想用PROC的游标实现多行查询,不过一直出现问题请大家帮我看一下,感谢
void muladd()
{
    EXEC SQL BEGIN DECLARE SECTION;
    char author_code[8], name[10];
    float salary;
    short salary_ind;
  EXEC SQL END DECLARE SECTION;
    printf("\n输入作家代码: ");
    gets(author_code);       /*为主变量赋值*/
  
  EXEC SQL DECLARE SX CURSOR FOR
       SELECT name, salary 
       FROM auths
       WHERE author_code = :author_code
   FOR UPDATE OF salary;
  EXEC SQL OPEN SX  while(1)
  {    
       EXEC SQL FETCH SX INTO :name,:salary;/*游标指针向前推进一行,然后从结果集中取当前行,送响应主变量*/
       
    if(sqlca.sqlcode<>SUCCESS)
      break;
       printf("%s,%s,%f",author_code,name,salary);
  }
  EXEC SQL CLOSE SX; }

解决方案 »

  1.   

    void mulselect()
     {
    EXEC SQL BEGIN DECLARE SECTION; char author_code[20];
    char name[20];
    float salary;
    EXEC SQL END DECLARE SECTION;
    printf("输入作者号\n");
    gets(author_code);
    EXEC SQL INCLUDE sqlca;
        EXEC SQL DECLARE SX CURSOR FOR      SELECT author_code,name,salary
     FROM author
     WHERE author_code=:author_code;


    EXEC SQL OPEN SX; printf("\n作家代码\t作家姓名\t作家工资\n");
          printf("--------\t--------\t--------\n");
            
    for(;;)
    {
        EXEC SQL WHENEVER NOT FOUND DO break;
    EXEC SQL FETCH SX INTO:author_code,:name,:salary;
    printf("%8s\t%8s\t%8.2f\n",author_code,name,salary);
     
        }
    EXEC SQL CLOSE SX;
    printf("Have a good day!"); }
    现在我用这个程序,读出来的数据就停不下来,可能是游标读的数目出错,而且
    code,name,salary,只有code读的正确,后面两个是乱码。
      

  2.   

    判断跳出,改成了
                      if(sqlca.sqlcode<>SUCCESS)
    break;却报错:syntax error : '>'
      

  3.   

    "<>"这个应该是oracle里面的标志符吧,
    C里面应该是"!=",
    把"<>"替换成"!=",试试看
      

  4.   

    不知道sqlca.sqlcode<>SUCCESS
    这两者是什么类型的,根据相应的类型来比较吧
      

  5.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
    一方面,他们会为您的问题提供满意的答案,
    另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
    中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=230&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  6.   

    王翔
    注册日期: Jul,2006 
    发贴数: 1  应该是没有错误的, 只不过,如果仅仅为了printf就别for update勒。 
    ----------------------- EXEC SQL DECLARE SX CURSOR FOR 
    SELECT name, salary 
    FROM auths 
    WHERE author_code = :author_code 
    FOR UPDATE OF salary; 
    EXEC SQL OPEN SX while(1) 

    EXEC SQL FETCH SX INTO :name,:salary;/*游标指针向前推进一行,然后从结果集中取当前行,送响应主变量*/ if(sqlca.sqlcode<>SUCCESS) 
    break; 
    printf("%s,%s,%f",author_code,name,salary); 

    EXEC SQL CLOSE SX;