我在使用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的查询语句呢,请各位高手帮忙解答下.谢谢了
代码:
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的查询语句呢,请各位高手帮忙解答下.谢谢了
实在是想不出哪里出了问题
看了编译后的.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);
}
难道是游标的问题?
游标不能用在判断语句中
从.h文件来看
游标的语句就是if判断里面的语句
根本就没有包含else的语句
要想在if/else中都使用游标
只能定义两个游标分别获取