Bug #53015 OUT/INOUT parameters in Stored Procedures
Submitted: 21 Apr 2010 0:00 Modified: 18 Jun 2013 7:33
Reporter: Bogdan Degtyariov Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / ODBC Severity:S4 (Feature request)
Version:5.1 OS:Any
Assigned to: Bogdan Degtyariov CPU Architecture:Any

[21 Apr 2010 0:00] Bogdan Degtyariov
Description:
Current implementation of Connector/ODBC does not allow binding OUT/INOUT parameters without supplementary use of session variables in MySQL server.
This conception is not obvious for some users.

How to repeat:
CREATE PROCEDURE p(IN ver_in VARCHAR(25),INOUT ver_out VARCHAR(25)) 
BEGIN
 SELECT concat(ver_in, ' ', ver_out) INTO ver_out; 
END

This code looks OK from ODBC point of view:

char* strStmt = "call p(?,?)";
rc = SQLPrepare(hstmt, (SQLCHAR *)strStmt, SQL_NTS);
rc = SQLBindParameter(hstmt, 1, ... );
rc = SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_BINARY, SQL_LONGVARBINARY, BUFFER_SIZE, 0, (SQLPOINTER)outBuffer, BUFFER_SIZE, &cbOutBuffer);
rc = SQLExecute(hstmt);

However, it causes error such as

"OUT or INOUT argument 2 for routine test.sp_varchar_inout is not a variable"

Suggested fix:
Pass parameters to stored routines through session variables in a way similar to Connector/NET.
[12 May 2010 9:46] Bogdan Degtyariov
"c/ODBC should automate use of session variables when passing IN/INOUT params to SP much like c/NET does
[18 Jun 2013 7:33] Bogdan Degtyariov
Implemented in Connector/ODBC 5.2.1
[21 Mar 2017 7:30] Bogdan Degtyariov
Posted by developer:
 
Fixed in C/ODBC 5.2.6