我的存储过程,是有返回值,和结果集的。但是调用的时候,不能返回,返回值。结果集能得到。
或许,是我调用有问题。请教,MYSQL怎么同时获取结果集和返回值。
存储过程:
DELIMITER $$DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`db`@`%` PROCEDURE `test`(out ret int)
begin
select * from USERBASE_TBL;
set ret=2;
end $$DELIMITER ;C++代码:
.............
if(mysql_more_results(&m_Mysql))
{
{
printf("multe rs\n");/////////这里成功
}

MYSQL_RES *Query = mysql_store_result(&m_Mysql);
if (Query != NULL)
        {
          printf("rs is ok\n");/////////这里成功
        }
if(mysql_next_result(&m_Mysql)==0)
{
MYSQL_RES *pRetQuery = mysql_store_result(&m_Mysql);
#if DEBUG
if(NULL == pRetQuery)//////////这里就是返回NULL了
{
printf("proc exec next rs error:%s\n",GetError().c_str());
}
#endif
}
执行结果:
multe rs
rs is ok
proc exec next rs error:

解决方案 »

  1.   

    你的这个
    CREATE DEFINER=`db`@`%` PROCEDURE `test`(out ret int)
    begin
    select * from USERBASE_TBL;
    set ret=2;
    end $$只是红色的这一句返回一个结果集啊。所以你的mysql_next_result应该不会再有记录集了。
      

  2.   

    out ret int,注意看这里。
    程序执行,mysql_next_result是有记录集。
      

  3.   

    `test`(out ret int)对于 out ret 是不是产生一个记录集的,你需要如下调用以取得这个值。
    mysql_query("call test(@xxx)");
    ...
    mysql_query("select @xxx");
    ...
      

  4.   

    out ret int,
    你应该绑定一个变量到穿上ret上,这样执行查询以后,就可以得到这个值到绑定变量上了。