| C++ - migrated from 32 bit to 64 bit and getting unrelated sqlcode while dealing with Oracle DB [message #577997] | 
			Fri, 22 February 2013 09:00   | 
		 
		
			
				
				
				  | 
					
						
						najmaaaa
						 Messages: 6 Registered: February 2013 
						
					 | 
					Junior Member  | 
					 | 
		 
		 
	 | 
 
	
		Hi, 
 
Previously we had 32 bit C++. Now, we have migrated it to 64 bit. And our C++ programs interact with Oracle 10g DB. 
 
Our C++ program was working fine with 32 bit. But once after we migrate to 64 bit we are facing problem with one program which does FETCH(EXEC SQL FETCH SUBP1 INTO :newTabRec;) from Oracle DB. ie, 
 
We exit from a for loop in the C++ program when we get NOT FOUND(sqlca.sqlcode=1403) on executing the FETCH statement. 
 
The sqlcode generated for NOT FOUND scenario is 1403. But, once after moving to 64 bit C++, we do not see the sqlcode 1403 instead we are seeing a different code 7124089117159473. 
 
As the sqlcode is not 1403, our program does not exit from the for loop and goes on an infinite loop. 
 
Am I missing anything that makes me to not get the exact sqlcode?
		
		
		
 |  
	| 
		
	 | 
 
 
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 | 
	
		
		
			| Re: C++ - migrated from 32 bit to 64 bit and getting unrelated sqlcode while dealing with Oracle DB [message #578009 is a reply to message #578005] | 
			Fri, 22 February 2013 12:32    | 
		 
		
			
				
				
				  | 
					
						
						najmaaaa
						 Messages: 6 Registered: February 2013 
						
					 | 
					Junior Member  | 
					 | 
		 
		 
	 | 
 
	
		Hello Michel, 
 
In the below code, we are looking for sqlca.sqlcode == 1403 and when it is met, we exit the loop. But, once after this upgrade, we do not get the sqlcode 1403. We are getting a different number(7124089117159473). Hence, it does not break the loop. 
 
 /* EXEC SQL WHENEVER NOT FOUND DO break; */ 
			for (;;) 
	        { 
	            memset(newTabRec.INPUT.arr, 0, sizeof(newTabRec.INPUT.arr)); 
	            newTabRec.INPUT.len = 0; 
	            newTabRec.INPUT.arr[newTabRec.INPUT.len] = '\0'; 
	 
	            memset(newTabRec.OUTPUT.arr, 0, sizeof(newTabRec.OUTPUT.arr)); 
	            newTabRec.OUTPUT.len = 0; 
	            newTabRec.OUTPUT.arr[newTabRec.OUTPUT.len] = '\0'; 
	 
				/* EXEC SQL FETCH SUBP1 INTO :newTabRec; */ 
	 
	{ 
	   struct sqlexd sqlstm; 
	   sqlorat((void **)0, &sqlctx, &oraca); 
	   sqlstm.sqlvsn = 12; 
	   sqlstm.arrsiz = 4; 
	   sqlstm.sqladtp = &sqladt; 
	   sqlstm.sqltdsp = &sqltds; 
	   sqlstm.iters = (unsigned int  )1; 
	   sqlstm.offset = (unsigned int  )100; 
	   sqlstm.selerr = (unsigned short)1; 
	   sqlstm.cud = sqlcud0; 
	   sqlstm.sqlest = (unsigned char  *)&sqlca; 
	   sqlstm.sqlety = (unsigned short)256; 
	   sqlstm.occurs = (unsigned int  )0; 
	   sqlstm.sqfoff = (         int )0; 
	   sqlstm.sqfmod = (unsigned int )2; 
	   sqlstm.sqhstv[0] = (unsigned char  *)&newTabRec.INPUT; 
	   sqlstm.sqhstl[0] = (unsigned long )4002; 
	   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  *)&newTabRec.OUTPUT; 
	   sqlstm.sqhstl[1] = (unsigned long )4002; 
	   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.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); 
	   if (sqlca.sqlcode == 1403) break; 
	   if (sqlca.sqlcode < 0) (retVal=sql_error("ORACLE error:")); 
	} 
	 
	 
				newTabRec.INPUT.arr[newTabRec.INPUT.len] = '\0'; 
	            		newTabRec.OUTPUT.arr[newTabRec.OUTPUT.len] = '\0'; 
	 
				inpRetVal = string((char *)newTabRec.INPUT.arr); 
				outRetVal = string((char *)newTabRec.OUTPUT.arr); 
	 
				subsTabValues[inpRetVal] = outRetVal; 
 
				if(!retVal) 
	                 break; 
			} 
        /* EXEC SQL CLOSE SUBP1; */
		
		
		
 |  
	| 
		
	 | 
 
 
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 | 
	| 
		
 |