Retrieve LOB Parameters in Open Server

Retrieve the complete LOB parameter data at once using srv_xferdata or in chunks using the new srv_get_data routine.

Open Server retrieves LOB parameters in chunks when the parameter length has been set to CS_UNUSED. See srv_get_data.

Example

Retrieves description of LOB parameters:
/*
** Retrieve the description of the parameters coming
** from client
*/

for (paramnum = 1; paramnum <= numparams; paramnum++)
{
   /*
   ** Get a description of the parameter.
   */
   ret = srv_descfmt(spp, CS_GET, SRV_RPCDATA,
      paramnum, &(paramfmtp[paramnum - 1]));

   /*
   ** Allocate space for the parameters and bind the
   ** data.
   */
   if (paramfmtp[paramnum-1].maxlength >= 0)
   {
      if (paramfmtp[paramnum-1].maxlength > 0)
      {
         data[paramnum-1] = calloc(1,
            paramfmtp[paramnum-1].maxlength);
      }
      else
      {
         ind[paramnum-1] = CS_NULLDATA;
      }
   }
   else
   {
      /*
      ** Allocate a large size buffer for BLOB data
      ** (which length is unknown yet)
      */
      blobbuf[blobnum] = malloc(BUFSIZE);
      blobnum++;
   }

   srv_bind(spp, CS_GET, SRV_RPCDATA, paramnum, 
      &(paramfmtp[paramnum-1]), data[paramnum-1], 
      &(len[paramnum-1]), &(ind[paramnum-1]))

   /*
   ** For every LOB parameter, call srv_get_data() in
   ** a loop as long as it succeeds
   /*
   for (i = 0; i < blobnum ; i++)
   {
      bufp = blobbuf[i];
      bloblen[i] = 0;
      do 
      {
         ret = srv_get_data(spp, bufp, BUFSIZE,
            &outlen);
         bufp += outlen;
         bloblen[i] += outlen;
      } while (ret == CS_SUCCEED);

      /*
      ** Check for the correct return code
      */
      if (ret != CS_END_DATA)
      {
         return CS_FAIL;
      }

   }

   /*
   ** And receive remaining client data srv_xferdata()
   */
   ret = srv_xferdata(spp, CS_GET, SRV_RPCDATA);
}