LONG Datatypes and Pro*C
From: William J. Bene <wjb_at_cscsun2.larc.nasa.gov>
Date: Wed, 15 Jul 1992 12:18:58 GMT
Message-ID: <1992Jul15.121858.11110_at_news.larc.nasa.gov>
}
William J. Bene
Computer Sciences Corporation
wjb_at_cscsun2.larc.nasa.gov Received on Wed Jul 15 1992 - 14:18:58 CEST
Date: Wed, 15 Jul 1992 12:18:58 GMT
Message-ID: <1992Jul15.121858.11110_at_news.larc.nasa.gov>
I am having to struggle with long datatypes using Pro*C. This time it is with an update statement. Here is the routine:
static BoolEnum DoUpdate L1(RTRPtr, myPtr) {
EXEC SQL BEGIN DECLARE SECTION; long fiscalyr; VARCHAR rrtr[20]; VARCHAR *rtrobj; EXEC SQL END DECLARE SECTION; rtrobj = malloc(sizeof(short) + 5000 * sizeof(char)); if (rtrobj == NULL) { strcpy(ErrStr, "Error allocating memory."); return(BOOL_FALSE); } STRING_TO_HOSTLONG(fiscalyr, FiscalYear); STRING_TO_HOSTSTR(rrtr, myPtr->rrtr); strcpy(rtrobj->arr, myPtr->rtrobj); rtrobj->len = strlen(rtrobj->arr); EXEC SQL WHENEVER SQLERROR GOTO SQLError; EXEC SQL WHENEVER NOT FOUND GOTO NotFound; EXEC SQL UPDATE RTR SET RTROBJ = :rtrobj WHERE RRTR = :rrtr AND RFY = :fiscalyr; EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL WHENEVER NOT FOUND CONTINUE; if (rtrobj != NULL) free(rtrobj); return(BOOL_TRUE); SQLError:
/* Handle Error */
NotFound:
/* Handle Not Found */
}
This method works correctly when CHAR datatypes are length zero, which sets them to NULL, but does not work when a LONG datatype is zero length. It is my understanding that when rtrobj->len is zero, the LONG or CHAR datatype will be set to NULL. Do you have to treat LONG datatypes differently than CHAR datatypes? Do I have to check for a zero length string and use an indicator variable to set the LONG to NULL? I haven't found any documentation that says so. Any help would be appreciated.
Thanks,
Will
William J. Bene
Computer Sciences Corporation
wjb_at_cscsun2.larc.nasa.gov Received on Wed Jul 15 1992 - 14:18:58 CEST