Currently my Pro*c program is fetching a cloumn which is defined as LONG in oracle db. The data in the column is around 65k. But when I am FETCHing it to a varchar[200kb] variable, I am only getting 22751 bytes of data using cursor.
Is there any limitation on the data which is fetched by a cursor in pro*C or do I need to do some thing more in coding to get all 65k of data present in the table column.
RVSN_DESC_LEN = 200*1024+1;
ETT_RVSN_TEXT.RVSN_DESC column contains 65k size data
Here is the code snippet:
VARCHAR rvsnLablName[RVSN_LABL_NAME_LEN];
short rvsnLablName_ind = 0;
VARCHAR rvsnLablText[RVSN_LABL_TEXT_LEN];
short rvsnLablText_ind = 0;
VARCHAR rvsnDesc[RVSN_DESC_LEN];
short rvsnDesc_ind = 0;
:
:
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL DECLARE sbdvRvsnDescInfoCur CURSOR FOR
SELECT
ETT_CELL_HDR.CELL_HDR_CODE,
ETT_CELL_HDR.CELL_HDR_TTL,
ETT_RVSN_TEXT.RVSN_DESC
FROM
ETT_CELL_HDR,
ETT_RVSN_TEXT
WHERE
ETT_RVSN_TEXT.GENL_ORD_ID = :genlOrdID_i AND
ETT_CELL_HDR.CELL_HDR_ID = ETT_RVSN_TEXT.CELL_HDR_ID(+)
ORDER BY
ETT_CELL_HDR.PRNT_SEQ_NBR, ETT_RVSN_TEXT.PRNT_SEQ_NBR;
EXEC SQL OPEN sbdvRvsnDescInfoCur;
EXEC SQL WHENEVER NOT FOUND DO break;
i = 0;
*rvsnDescInfo_iop = NULL;
for (;;)
{
#ifdef DEBUG
fprintf(outFile_gp, "reallocing, i = %d\n", i);
fprintf(outFile_gp, "sizeof(RvsnDescInfoType) = %d\n", sizeof(RvsnDescInfoType));
fflush(outFile_gp);
#endif /* DEBUG */
*rvsnDescInfo_iop = (RvsnDescInfoType*) realloc(*rvsnDescInfo_iop,
(i+1)*sizeof(RvsnDescInfoType));
if (NULL == *rvsnDescInfo_iop)
{
fprintf(stderr, "db_retrieveAddRvsnDescInfo: realloc() failed. errno = %d\n", errno);
fflush(stderr);
return FAIL;
}
memset(&rvsnDescInfo_iop[0], '\0', sizeof(RvsnDescInfoType));
EXEC SQL FETCH sbdvRvsnDescInfoCur
INTO
:rvsnLablName:rvsnLablName_ind,
:rvsnLablText:rvsnLablText_ind,
:rvsnDesc:rvsnDesc_ind;
rvsnLablName.arr[rvsnLablName.len] = '\0';
rvsnLablText.arr[rvsnLablText.len] = '\0';
if (rvsnDesc.len < RVSN_DESC_LEN)
{
rvsnDesc.arr[rvsnDesc.len] = '\0';
}
else
{
rvsnDesc.arr[RVSN_DESC_LEN - 1] = '\0';
}
#ifdef DEBUG
fprintf(outFile_gp, "rvsnLablName.len = %d\n", rvsnLablName.len);
fprintf(outFile_gp, "rvsnLablText.len = %d\n", rvsnLablText.len);
fprintf(outFile_gp, "rvsnDesc.len = %d\n", rvsnDesc.len);
fflush(outFile_gp);
#endif /* DEBUG */
if (-1 != rvsnLablName_ind)
strcpy(rvsnDescInfo_iop[0].rvsnLablName, rvsnLablName.arr);
else
strcpy(rvsnDescInfo_iop[0].rvsnLablName, " ");
if (-1 != rvsnLablText_ind)
strcpy(rvsnDescInfo_iop[0].rvsnLablText, rvsnLablText.arr);
else
strcpy(rvsnDescInfo_iop[0].rvsnLablText, " ");
if (-1 != rvsnDesc_ind)
strcpy(rvsnDescInfo_iop[0].rvsnDesc, rvsnDesc.arr);
else
strcpy(rvsnDescInfo_iop[0].rvsnDesc, " ");
i++;
}
EXEC SQL CLOSE sbdvRvsnDescInfoCur;
return i;
When I display rvsnDesc.arr, I get 22751 as size.
Any help in this issue will be highly appreciated.
Thanks!