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);
}