Hi ,
   I am calling a function in C , which in turn calls an EXEC SQL block , Thru this I 
am calling an database function , which updates/selects data from the database.
The interesting part part is that , the control DOES NOT enter the EXEC BLOCK for some 
conditions , the same functionality  is achieved when i call the database function 
from another IDENTICAL  EXEC BLOCK .!!!!!
  I tried running the same function from the sqlplus window , it is running fime .
Any Clues As to why is it happening 
I am attaching the code for both the functions ...


FUNCTION 1 ----- HERE THE EXEC WORKS FINE ....


int load_pin_error_number (V_card_number,
                           V_pin_verification_number)
char *V_card_number;
int  *V_pin_verification_number;
{
 
EXEC SQL BEGIN DECLARE SECTION;
        int             response_code;
        VARCHAR         T_card_number[22];
        int             T_pin_verification_number;
        VARCHAR         ERREUR[256];
EXEC SQL END DECLARE SECTION;

char    buffer[LG_MAX];

trace_event("Debut load_pin_error_number()", PROCESSING);

memset(T_card_number.arr, 0, sizeof(T_card_number.arr));
memcpy(T_card_number.arr, V_card_number, strlen(V_card_number));
T_card_number.len = strlen(V_card_number);


response_code =999;
EXEC SQL EXECUTE
BEGIN
:response_code:= HPS_SELECT_PIN_NB (:T_card_number,
                                    :T_pin_verification_number);

EXCEPTION
WHEN OTHERS THEN BEGIN
                :response_code :=-2;
                :ERREUR := SQLERRM;
                END;
END;

if (response_code == -2)
{
        memset(buffer,  0,      sizeof(buffer));
        sprintf(buffer,"GET PIN ERROR ERROR : %s\n", ERREUR.arr);
        trace_event(buffer, ERROR);
}
 
*V_pin_verification_number = T_pin_verification_number;
 
trace_event("Fin   load_pin_error_number()", PROCESSING);
 
return(response_code);
 
}


 
FUNCTION 1 ----- HERE THE EXEC SQL DOES NOT WORK  FINE ....

 
int inc_pin_error_number (V_card_number)
char *V_card_number;
{
 
EXEC SQL BEGIN DECLARE SECTION;
        int             response_code;
        VARCHAR         T_card_number[22];
        VARCHAR         ERREUR[256];
EXEC SQL END DECLARE SECTION;
 
char  buffer[LG_MAX];
 
trace_event("Debut inc_pin_error_number()", PROCESSING);
 
memset(T_card_number.arr, 0, sizeof(T_card_number.arr));
memcpy(T_card_number.arr, V_card_number, strlen(V_card_number));
T_card_number.len = strlen(V_card_number);


response_code =-1;
EXEC SQL EXECUTE
BEGIN
:response_code:= HPS_INC_PIN_NB (:T_card_number);

EXCEPTION
WHEN OTHERS THEN BEGIN
                :response_code :=-2;
                :ERREUR := SQLERRM;
                END;
END;
END-EXEC;


if (response_code == -2)
{
        memset(buffer,  0,      sizeof(buffer));
        sprintf(buffer,"INC PIN ERROR ERROR : %s\n", ERREUR.arr);
        trace_event(buffer, ERROR);
}
 
trace_event("Fin   inc_pin_error_number()", PROCESSING);
return(response_code);
}


Reply via email to