'C' precompiler issue ? Stored Procedure invoked from 'C' program...
626351May 5 2009 — edited May 5 2009HELP... I am out of ideas... have a stored procedure that is called from a big 'C' program that isn't returning the rows that it should. I copied & pasted the section of code containing the stored procedure call into a new stand-alone 'C' program and it works fine. I made sure both 'C' programs were passing the same input parameters, both 'C' programs were compiled using the same Makefile, both 'C' programs have the same include files, both 'C' programs physically exist on the same server and are using the same version of Oracle and Sun Solaris. We noticed a slight difference in the '.c' file generated at compile time. Below are the details (in case someone can decipher this stuff)...
PIECE OF STAND-ALONE PROGRAM (that works):
---------------------------------------------------------------------
EXEC SQL BEGIN DECLARE SECTION;
double db_bot_lat;
double db_left_lon;
double db_top_lat;
double db_right_lon;
EXEC SQL END DECLARE SECTION;
EXEC SQL EXECUTE
BEGIN
gateway.SELECT_RESOLV(:cd_prefix, :db_bot_lat, :db_left_lon, :db_top_lat,
:db_right_lon, :exist_cd, :exist_cell, :exist_frame,
:exist_prod, :exist_size, :exist_sec_class);
END;
END-EXEC;
PIECE OF STAND-ALONE PROGRAM ".C" FILE (that works):
----------------------------------------------------------------------------------
/* EXEC SQL EXECUTE
BEGIN
gateway.SELECT_RESOLV(:cd_prefix, :db_bot_lat, :db_left_lon, :db_top_lat,
:db_right_lon, :exist_cd, :exist_cell, :exist_frame,
:exist_prod, :exist_size, :exist_sec_class);
END;
END-EXEC; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 11;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "begin gateway . SELECT_RESOLV ( :cd_prefix , :db_bot_lat , :d\
b_left_lon , :db_top_lat , :db_right_lon , :exist_cd , :exist_cell , :exist_fr\
ame , :exist_prod , :exist_size , :exist_sec_class ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )36;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)cd_prefix;
sqlstm.sqhstl[0] = (unsigned long )6;
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 *)&db_bot_lat;
sqlstm.sqhstl[1] = (unsigned long )sizeof(double);
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 *)&db_left_lon;
sqlstm.sqhstl[2] = (unsigned long )sizeof(double);
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 *)&db_top_lat;
sqlstm.sqhstl[3] = (unsigned long )sizeof(double);
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_right_lon;
sqlstm.sqhstl[4] = (unsigned long )sizeof(double);
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.sqhstv[5] = (unsigned char *)exist_cd;
sqlstm.sqhstl[5] = (unsigned long )21;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( short *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned long )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = (unsigned char *)exist_cell;
sqlstm.sqhstl[6] = (unsigned long )11;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( short *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned long )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = (unsigned char *)exist_frame;
sqlstm.sqhstl[7] = (unsigned long )13;
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( short *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned long )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = (unsigned char *)exist_prod;
sqlstm.sqhstl[8] = (unsigned long )9;
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( short *)0;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned long )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = (unsigned char *)&exist_size;
sqlstm.sqhstl[9] = (unsigned long )sizeof(int);
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( short *)0;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned long )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqhstv[10] = (unsigned char *)exist_sec_class;
sqlstm.sqhstl[10] = (unsigned long )5;
sqlstm.sqhsts[10] = ( int )0;
sqlstm.sqindv[10] = ( short *)0;
sqlstm.sqinds[10] = ( int )0;
sqlstm.sqharm[10] = (unsigned long )0;
sqlstm.sqadto[10] = (unsigned short )0;
sqlstm.sqtdso[10] = (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);
}
PIECE OF BIG PROGRAM (that doesn't work):
--------------------------------------------------------------
EXEC SQL BEGIN DECLARE SECTION;
double db_bot_lat;
double db_left_lon;
double db_top_lat;
double db_right_lon;
EXEC SQL END DECLARE SECTION;
EXEC SQL EXECUTE
BEGIN
gateway.SELECT_RESOLV(:cd_prefix, :db_bot_lat, :db_left_lon, :db_top_lat,
:db_right_lon, :exist_cd, :exist_cell, :exist_frame,
:exist_prod, :exist_size, :exist_sec_class);
END;
END-EXEC;
PIECE OF BIG PROGRAM ".C" FILE (that doesn't work):
---------------------------------------------------------------------------
/* EXEC SQL EXECUTE
BEGIN
gateway.SELECT_RESOLV(:cd_prefix, :db_bot_lat, :db_left_lon, :db_top_lat,
:db_right_lon, :exist_cd, :exist_cell, :exist_frame,
:exist_prod, :exist_size, :exist_sec_class);
END;
END-EXEC; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 31;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "begin gateway . SELECT_RESOLV ( :cd_prefix , :db_bot_lat , :d\
b_left_lon , :db_top_lat , :db_right_lon , :exist_cd , :exist_cell , :exist_fr\
ame , :exist_prod , :exist_size , :exist_sec_class ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )5741;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)cd_prefix;
sqlstm.sqhstl[0] = (unsigned long )6;
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 *)&db_bot_lat;
sqlstm.sqhstl[1] = (unsigned long )sizeof(double);
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 *)&db_left_lon;
sqlstm.sqhstl[2] = (unsigned long )sizeof(double);
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 *)&db_top_lat;
sqlstm.sqhstl[3] = (unsigned long )sizeof(double);
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_right_lon;
sqlstm.sqhstl[4] = (unsigned long )sizeof(double);
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.sqhstv[5] = (unsigned char *)exist_cd;
sqlstm.sqhstl[5] = (unsigned long )21;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( short *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned long )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = (unsigned char *)exist_cell;
sqlstm.sqhstl[6] = (unsigned long )11;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( short *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned long )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = (unsigned char *)exist_frame;
sqlstm.sqhstl[7] = (unsigned long )13;
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( short *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned long )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = (unsigned char *)exist_prod;
sqlstm.sqhstl[8] = (unsigned long )9;
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( short *)0;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned long )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = (unsigned char *)&exist_size;
sqlstm.sqhstl[9] = (unsigned long )sizeof(int);
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( short *)0;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned long )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqhstv[10] = (unsigned char *)exist_sec_class;
sqlstm.sqhstl[10] = (unsigned long )5;
sqlstm.sqhsts[10] = ( int )0;
sqlstm.sqindv[10] = ( short *)0;
sqlstm.sqinds[10] = ( int )0;
sqlstm.sqharm[10] = (unsigned long )0;
sqlstm.sqadto[10] = (unsigned short )0;
sqlstm.sqtdso[10] = (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);
}