Bug #71431 | ODBC 5.2 Driver - can't call Stored Procedure | ||
---|---|---|---|
Submitted: | 20 Jan 2014 17:15 | Modified: | 1 Apr 2014 10:47 |
Reporter: | Tina Basinger | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | Connector / ODBC | Severity: | S3 (Non-critical) |
Version: | 5.2 | OS: | Any |
Assigned to: | Bogdan Degtyariov | CPU Architecture: | Any |
[20 Jan 2014 17:15]
Tina Basinger
[21 Jan 2014 8:30]
Bogdan Degtyariov
Hi Tina, Thank you for your interest in MySQL software. Unfortunately, I was not able to repeat the problem. Please check the screenshot (rest_result_screenshot.png) from my test application showing the results returned by the stored procedure. Which version of Connector/ODBC driver 5.2 you are using? I recommend the most recent GA release version 5.2.6.
[21 Jan 2014 8:31]
Bogdan Degtyariov
Test program dialog screenshot
Attachment: test_result_screenshot.png (image/png, text), 11.73 KiB.
[21 Jan 2014 8:31]
Bogdan Degtyariov
C# test project
Attachment: bug71431.zip (application/zip, text), 9.78 KiB.
[21 Jan 2014 8:32]
Bogdan Degtyariov
Also, uploading the test C# project for Visual Studio. Perhaps you could give it a try and tell me whether the error is still showing up? Thanks.
[21 Jan 2014 20:34]
Tina Basinger
Thank you for your timely feedback! I gave your project a try, and it worked for me as well. My stored procedure was a bit more advanced though, and after much more debugging and drilling into it, I determined that I needed a begin/end wrapped around the action occurring inside a cursor loop. I did not need this extra Begin/End in 5.1, but I do need it in 5.2. Again, thank you for looking into this, and helping focus my efforts onto the stored procedure itself. -Tina delimiter $$ CREATE PROCEDURE `GetActualData`(IN clientIDValue INT, IN equipIDValue VARCHAR(45), IN dataPointNameValue VARCHAR(45)) BEGIN DECLARE dpName VARCHAR(45); DECLARE equipID INT; DECLARE cur1 select x, y from greensleevesdata.actualdata WHERE z = clientIDValue AND equipmentID LIKE equipIDValue AND dataPointName LIKE dataPointNameValue order by equipmentID, dataPointName; OPEN cur1; read_loop: LOOP FETCH cur1 INTO equipID, dpName; BEGIN SELECT * FROM tableX WHERE equipmentID = equipID AND dataPointName = dpName; END; END LOOP; END$$
[22 Jan 2014 3:35]
Bogdan Degtyariov
Thanks for your reply, Tina. I might need to look deeper into the particular issue with your stored procedure. At the first glance the problem might be caused by multiple result-sets as SELECT is spinning inside a LOOP. Can you please tell me if there might be more than one result returned by the cursor, so the LOOP with SELECT spins more than once producing several result sets?
[22 Jan 2014 18:26]
Tina Basinger
Yes, that is correct. I loop through my cursor and do another query based on the info in the cursor's current location. Is there a better way to collect data like this?
[1 Apr 2014 10:47]
Bogdan Degtyariov
Verified with the following table and stored procedure: -------------------------------------------------------------- create table tab (x int); insert into tab values (22), (33), (44); -------------------------------------------------------------- CREATE PROCEDURE `GetActualData`(a int, b int, c varchar(255)) begin declare z INT; declare cur1 cursor for select x from tab; open cur1; read_loop: LOOP FETCH cur1 INTO z; select concat ('DATA1 = ', z, ':', a, '-', b, '-', c) as actualdata1; END LOOP; end;
[23 Mar 2015 11:09]
Trent Lloyd
Community user ran into this issue here: http://stackoverflow.com/questions/29208354/commands-out-of-sync-using-mysql-odbc-connecto...