StreamOutputLOBonCall IBM data server driver configuration keyword
The StreamOutputLOBonCall keyword
enables streaming of OUT parameters of stored procedures that are
LOB or XML data type.
You can also specify the StreamOutputLOBonCall keyword
to obtain the data length information for the OUT parameters that
are LOB and XML data type.
- Equivalent CLI keyword
- StreamOutputLOBonCall
- Equivalent IBM® data server provider for .NET connection string keyword
- Not available.
- IBM data server driver configuration file (db2dsdriver.cfg) syntax
<parameter name="StreamOutputLOBonCall" value="true | false"/>
- Default setting:
- The streaming of OUT parameter data that is LOB or XML data type is disabled.
- Usage notes:
- You must ensure that the following conditions are satisfied to get the actual data length information and stream the OUT parameter data that is LOB or XML data type:
- Specify NULL value for the rgbValue argument of the SQLBindParameters() function for OUT parameters that are LOB and XML data type.
- If application requires the data length information for OUT parameters that are LOB and XML data type, you must pass the valid memory address to an SQLINTEGER variable for the pcbValue argument of the SQLBindParameter() function. Successful CALL statement through use of the SQLExecute() function returns the length information in the SQLINTEGER variable.
- All OUT parameter data from the stored procedure call is retrieved with the SQLGetData() function before you retrieve any result sets with the SQLFetch() function. Calling the SQLFetch() function causes the CLI driver to delete all the data buffers.
- The LOB locators are not used.
- The OUT parameters of stored procedures are not ARRAY form of LOB or XML data type.
The following example retrieves the length of the OUT parameter
that is CLOB data type when the StreamOutputLOBonCall keyword
is enabled:
#define C2_LEN (2 * 1024 * 1024 * 1024) // 2GB
SQLPrepare (hStmt, "CALL clob1(?, ?)", SQL_NTS);
...
// The rgbValue is set to NULL for the second SP argument.
// Address to an SQLINTEGER variable is passed to hold the length details.
SQLBindParameter(hStmt, 2, SQL_PARAM_OUTPUT,
SQL_C_CHAR, SQL_CLOB,
C2_LEN+1, 0, NULL, 0, &ind1);
SQLExecute (hStmt);
// When the SQLExecute() function returns SQL_SUCCESS, the SQLINTEGER variable contains the data length.
// Following statement allocates ind1 bytes to store the CLOB data
buffer = malloc (ind1 + 1);
// call SQLGetData with the same rgbValue value and the ind1 as the cbValueMax.
// cbValueMax to be ind1 to get entire argument data in one go
SQLGetData(hStmt, 2, SQL_C_CHAR, buffer, ind1, &ind1);
Following
example streams OUT parameter data that is LOB or XML data type in 1
K bytes:#define C3_LEN (2 * 1024 * 1024 * 1024) // 2GB
// Allocate fixed 1K bytes to store part of the CLOB data
buffer = malloc (1024);
SQLPrepare (hStmt, "CALL clob1(?, ?)", SQL_NTS);
...
// As CLOB data is retrieved in pieces, the data length information is not necessary.
// The pcbValue is NULL since data length information is not needed.
SQLBindParameter(hStmt, 2, SQL_PARAM_OUTPUT,
SQL_C_CHAR, SQL_CLOB,
C3_LEN+1, 0, NULL, 0, NULL);
SQLExecute (hStmt);
// Call the SQLGetData() function inside the loop till SQL_NO_DATA_FOUND is returned.
while (rc != SQL_NO_DATA_FOUND)
{
rc = SQLGetData(hStmt, 2, SQL_C_CHAR, buffer, 1024, &ind1);
}