我在使用proc的时候出现一个这样的现象
代码:
if (bankid == 1000)//all banks
    {
      EXEC SQL AT :db_link DECLARE file_cur CURSOR FOR
       SELECT BankID,CheckPermission,BankErrTransNum,BankUnhTransNum,LotteryErrTransNum,LotteryUnhTransNum
        FROM   Bank_File_Query_View
        WHERE ProvinceID = :pvcid 
         AND BankExpID >= to_date(:start, 'yyyy-mm-dd') 
         AND BankExpID <= to_date(:end, 'yyyy-mm-dd') ;
    }
    else// single bank
    {
      EXEC SQL AT :db_link DECLARE file_cur CURSOR FOR
       SELECT BankID,CheckPermission,BankErrTransNum,BankUnhTransNum,LotteryErrTransNum,LotteryUnhTransNum
        FROM   Bank_File_Query_View
        WHERE ProvinceID = :pvcid AND BankID = :bankid
         AND BankExpID >= to_date(:start, 'yyyy-mm-dd') 
         AND BankExpID <= to_date(:end, 'yyyy-mm-dd') ;
    }
当我输入条件bankid=100(注:不是1000)的时候,else里面是差不多我的数据,游标的返回值应该为0,但是不知道为什么游标返回的确实走的当bankid == 1000的里面的查询语句,我在bankid == 1000的判断条件里面加入printf(),程序根本没有走到那个判断条件中,但是为什么在else查询不到的情况下就会走bankid == 1000的查询语句呢,请各位高手帮忙解答下.谢谢了

解决方案 »

  1.   

    代码就这一段
    实在是想不出哪里出了问题
    看了编译后的.h文件
    if (bankid == 1000)
    {
    printf("\n查询所有银行");
    fflush(stdout);
    /* EXEC SQL AT :db_link DECLARE test_file CURSOR FOR 
    SELECT BankID,to_char(BankExpID, 
    'yyyy-mm-dd'),FileStatus,CheckPermission,BankErrTransNum,BankUnhTransNum,LotteryErrTransNum,LotteryUnhTransNum 
    FROM   Bank_File_Query_View
    WHERE ProvinceID = :pvcid 
    AND BankExpID >= to_date(:start, 'yyyy-mm-dd') 
    AND BankExpID <= to_date(:end, 'yyyy-mm-dd') ; */  }
    else
    {
    printf("\n查询单个银行");
    fflush(stdout);

    printf("\npvc = %d,bank = %d ,start = %s,end = %s",pvcid,bankid,start,end);
    fflush(stdout);

    /* EXEC SQL AT :db_link DECLARE file_cur CURSOR FOR 
    SELECT BankID,to_char(BankExpID, 'yyyy-mm-dd'),FileStatus,CheckPermission,BankErrTransNum,BankUnhTransNum,LotteryErrTransNum,LotteryUnhTransNum 
    FROM   Bank_File_Query_View
    WHERE ProvinceID = :pvcid AND BankID = :bankid
    AND BankExpID >= to_date(:start, 'yyyy-mm-dd') 
    AND BankExpID <= to_date(:end, 'yyyy-mm-dd') ; */  } /* EXEC SQL OPEN file_cur; */ {
      struct sqlexd sqlstm;
      sqlstm.sqlvsn = 12;
      sqlstm.arrsiz = 6;
      sqlstm.sqladtp = &sqladt;
      sqlstm.sqltdsp = &sqltds;
      sqlstm.stmt = sq0069;
      sqlstm.iters = (unsigned int  )1;
      sqlstm.offset = (unsigned int  )1342;
      sqlstm.selerr = (unsigned short)1;
      sqlstm.cud = sqlcud0;
      sqlstm.sqlest = (unsigned char  *)&sqlca;
      sqlstm.sqlety = (unsigned short)256;
      sqlstm.occurs = (unsigned int  )0;
      sqlstm.sqcmod = (unsigned int )0;
      sqlstm.sqhstv[0] = (unsigned char  *)&pvcid;
      sqlstm.sqhstl[0] = (unsigned long )sizeof(short);
      sqlstm.sqhsts[0] = (         int  )0;
      sqlstm.sqindv[0] = (         short *)0;
      sqlstm.sqinds[0] = (         int  )0;
      sqlstm.sqharm[0] = (unsigned long )0;
      sqlstm.sqadto[0] = (unsigned short )0;
      sqlstm.sqtdso[0] = (unsigned short )0;
      sqlstm.sqhstv[1] = (unsigned char  *)&bankid;
      sqlstm.sqhstl[1] = (unsigned long )sizeof(short);
      sqlstm.sqhsts[1] = (         int  )0;
      sqlstm.sqindv[1] = (         short *)0;
      sqlstm.sqinds[1] = (         int  )0;
      sqlstm.sqharm[1] = (unsigned long )0;
      sqlstm.sqadto[1] = (unsigned short )0;
      sqlstm.sqtdso[1] = (unsigned short )0;
      sqlstm.sqhstv[2] = (unsigned char  *)start;
      sqlstm.sqhstl[2] = (unsigned long )11;
      sqlstm.sqhsts[2] = (         int  )0;
      sqlstm.sqindv[2] = (         short *)0;
      sqlstm.sqinds[2] = (         int  )0;
      sqlstm.sqharm[2] = (unsigned long )0;
      sqlstm.sqadto[2] = (unsigned short )0;
      sqlstm.sqtdso[2] = (unsigned short )0;
      sqlstm.sqhstv[3] = (unsigned char  *)end;
      sqlstm.sqhstl[3] = (unsigned long )11;
      sqlstm.sqhsts[3] = (         int  )0;
      sqlstm.sqindv[3] = (         short *)0;
      sqlstm.sqinds[3] = (         int  )0;
      sqlstm.sqharm[3] = (unsigned long )0;
      sqlstm.sqadto[3] = (unsigned short )0;
      sqlstm.sqtdso[3] = (unsigned short )0;
      sqlstm.sqhstv[4] = (unsigned char  *)db_link;
      sqlstm.sqhstl[4] = (unsigned long )200;
      sqlstm.sqhsts[4] = (         int  )0;
      sqlstm.sqindv[4] = (         short *)0;
      sqlstm.sqinds[4] = (         int  )0;
      sqlstm.sqharm[4] = (unsigned long )0;
      sqlstm.sqadto[4] = (unsigned short )0;
      sqlstm.sqtdso[4] = (unsigned short )0;
      sqlstm.sqphsv = sqlstm.sqhstv;
      sqlstm.sqphsl = sqlstm.sqhstl;
      sqlstm.sqphss = sqlstm.sqhsts;
      sqlstm.sqpind = sqlstm.sqindv;
      sqlstm.sqpins = sqlstm.sqinds;
      sqlstm.sqparm = sqlstm.sqharm;
      sqlstm.sqparc = sqlstm.sqharc;
      sqlstm.sqpadto = sqlstm.sqadto;
      sqlstm.sqptdso = sqlstm.sqtdso;
      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    }
    难道是游标的问题?
      

  2.   

    找到原因了
    游标不能用在判断语句中
    从.h文件来看
    游标的语句就是if判断里面的语句
    根本就没有包含else的语句
    要想在if/else中都使用游标
    只能定义两个游标分别获取