List:MySQL++« Previous MessageNext Message »
From:Jim Wallace Date:June 12 2007 10:16pm
Subject:RE: mysql++ and stored procedures
View as plain text  
I call them all them time.  There are a couple gotcha about using stored
procs.  First you need to setup to get multiple reset sets, which is a
MySQL requirement:

true); // need this for calling SPs
		m_conn->connect( m_dbName.c_str(), dbServer.c_str(),
dbUser.c_str(), dbPassword.c_str(), dbPort );
m_conn->set_option(Connection::Option::opt_reconnect, true);

	catch (const mysqlpp::Exception& er)

Then if you call a SP, you usually get two results sets back, the second
one always empty.  You must pull off this empty result set, or else the
connection will break on the *next* SQL call.  

Getting OUT parameters can be done like this:

	query << "CALL " << m_kanevaDbName <<
".apply_transaction_and_details_to_user_balance( %0, %1, %2q, %3q, %4,
%5, @rc, @newBalance, @tranId ); SELECT @rc, @newBalance, @tranId;";

This will return two results sets, first for the SP, and one for the

-----Original Message-----
From: William F. Dowling [mailto:william.dowling@stripped] 
Sent: Tuesday, June 12, 2007 5:40 PM
To: plusplus@stripped
Subject: mysql++ and stored procedures

Does mysql++ handle stored procedures? I didn't see anything in the
docs.  When I tried, I an exception was thrown with this message:

  PROCEDURE test.get_times_cited can't return a result set in the given

I'm new to mysql++, and fairly new to mysql too, so this is probably
something really simple; I just don't know how to fix the complaint.


This select statement works fine:
 select count(src_ck) from cites where cites.cite_ck='ck2';
| count(src_ck) |
|             1 |
1 row in set (0.11 sec)

I created this procedure:

 create procedure get_times_cited(ck varchar(32)) select  count(src_ck)
from cites where cites.cite_ck=ck;//

I can call it from a command line client:
 call get_times_cited('ck2');
| count(src_ck) |
|             1 |
1 row in set (0.11 sec)

I coded it like this:

	try {
	    mysqlpp::Query query = con.query();

            // (*)
	    // query << "select count(src_ck) from cites where

            // << mysqlpp::quote << ck;

	    query << "call get_times_cited(" << mysqlpp::quote << ck <<

	    mysqlpp::Result res =;
	    if (res) {
		mysqlpp::Row row =;  // count returns one row
		*result =;
	catch (const mysqlpp::BadQuery& er) {
	    // Handle any query errors
	    std::cerr << "Query error: " << er.what() << std::endl;

That works fine if I use the two lines after the (*) comment, but throws
an exception as I've coded it here.

Any help would be gratefully appreciated.  Thanks,


William F Dowling

MySQL++ Mailing List
For list archives:
To unsubscribe:

mysql++ and stored proceduresWilliam F. Dowling12 Jun
  • RE: mysql++ and stored proceduresJim Wallace12 Jun
    • RE: mysql++ and stored proceduresWilliam F. Dowling13 Jun
  • Re: mysql++ and stored proceduresWarren Young13 Jun