DB2 - Problem description
Problem IC70645 | Status: Closed |
CLI0124E OCCURS WHEN THE SELECT STATEMENT HAS ONE PARAMETER MARKER BUT DECLARES TWO PARAMETERS IN THE PROGRAM. | |
product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
Problem description: | |
After upgrading from V97 FP1 to V97 FP2, CLI0124E occurs when the select statement has only one parameter marker but declaring two parameters in a program then binding a value to only one parameter. Since no value is supplied to the second argument, ODBC is assuming default parameter and passing the SQL_DEFAULT_PARAM indicator. Before to FP2 there was not Default param/Unassigned parameter check, CLI is just ignoring the second SQLBindParameter since there is only one "?". In FP2, there was an enhancement of Extended Indicator function. Because of the indicator check if the extended indicator is not enabled, SQLBindParameter is throwing error. Since the application is running with a default extended indicator setting, its behavior should not be changed to keep the backward compatibility. The same error happens at INSERT or UPDATE case as well. The following code will result in CLI0124E. With cSelect.Parameters .Add("@ABC", OdbcType.Char, 17) .Add("@EFG", OdbcType.Char, 8) End With cSelect.Prepare() cSelect.Parameters(0).Value = "12345678" 'Set 1st param Dim tmpDataAdapter As New OdbcDataAdapter(cSelect) tmpDataAdapter.Fill(dt) Another symptom of this problem is that an ODBC application using the DB2 CLI driver can hang indefinitely, or crash. The problem will occur when performing an SQLBindParameter() call such that the address used for both the data buffer (rgbValue) and the length or indicator value (pcbValue) are logical offsets as opposed to real addresses, and the statement attribute SQL_ATTR_BIND_OFFSET_PTR was set prior to the call to SQLBindParameter. This should work, however without this APAR, an application can hang when trying to call the SQLBindParameter API. A DB2 CLI trace should reveal the following for example at the hang point: SQLBindParameter( hStmt=1:4, iPar=1, fParamType=SQL_PARAM_INPUT, fCType=SQL_C_SLONG, fSQLType=SQL_INTEGER, cbColDef=10, ibScale=0, rgbValue=&00000009, cbValueMax=0, pcbValue=&00000005 ) ---> Time elapsed - +5.701000E-003 seconds | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * ALL * **************************************************************** * PROBLEM DESCRIPTION: * * After upgrading from V97 FP1 to V97 FP2, CLI0124E occurs * * when the select statement has only one parameter marker but * * declaring two parameters in a program then binding a value * * to only one parameter. * * * * Since no value is supplied to the second argument, ODBC is * * assuming default parameter and passing the SQL_DEFAULT_PARAM * * indicator. * * Before to FP2 there was not Default param/Unassigned * * parameter check, CLI is just ignoring the second * * SQLBindParameter since there is only one "?". In FP2, there * * was an enhancement of Extended Indicator function. Because * * of the indicator check if the extended indicator is not * * enabled, SQLBindParameter is throwing error. Since the * * application is running with a default extended indicator * * setting, its behavior should not be changed to * * keep the backward compatibility. * * * * The same error happens at INSERT or UPDATE case as well. The * * following statements will result in CLI0124E. * * * * With cSelect.Parameters * * .Add("@ABC", OdbcType.Char, 17) * * .Add("@EFG", OdbcType.Char, 8) * * End With * * cSelect.Prepare() * * cSelect.Parameters(0).Value = "12345678" 'Set 1st param * * Dim tmpDataAdapter As New OdbcDataAdapter(cSelect) * * tmpDataAdapter.Fill(dt) * * * * Another symptom of this problem is that an ODBC application * * using the DB2 CLI driver can hang indefinitely, or crash. * * The problem will occur when performing an SQLBindParameter() * * call such that the address used for both the data buffer * * (rgbValue) and the length or indicator value (pcbValue) are * * logical offsets as opposed to real addresses, and the * * statement attribute SQL_ATTR_BIND_OFFSET_PTR was set prior * * to the call to SQLBindParameter. * * This should work, however without this APAR, an application * * can hang when trying to call the SQLBindParameter API. A DB2 * * CLI trace should reveal the following for example at the * * hang point: * * * * SQLBindParameter( hStmt=1:4, iPar=1, * * fParamType=SQL_PARAM_INPUT, * * fCType=SQL_C_SLONG, fSQLType=SQL_INTEGER, cbColDef=10, * * ibScale=0, rgbValue=&00000009, cbValueMax=0, * * pcbValue=&00000005) * * * * ---> Time elapsed - +5.701000E-003 seconds * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 UDB version 9.7 fix pack 4. * **************************************************************** | |
Local Fix: | |
available fix packs: | |
DB2 Version 9.7 Fix Pack 4 for Linux, UNIX, and Windows | |
Solution | |
Problem was first fixed in DB2 UDB Version 9.7 Fix Pack 4 | |
Workaround | |
not known / see Local fix | |
BUG-Tracking | |
forerunner : APAR is sysrouted TO one or more of the following: IC73415 follow-up : | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 18.08.2010 10.05.2011 10.05.2011 |
Problem solved at the following versions (IBM BugInfos) | |
9.7.FP4 | |
Problem solved according to the fixlist(s) of the following version(s) | |
9.7.0.4 |