DROP TABLE IF EXISTS `t_test`;
CREATE TABLE `t_test` (
  `test_name` varchar(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;INSERT INTO `t_test` VALUES ('aaa');
INSERT INTO `t_test` VALUES ('bbb');
INSERT INTO `t_test` VALUES ('ccc');
INSERT INTO `t_test` VALUES ('ddd');
INSERT INTO `t_test` VALUES ('eee');
INSERT INTO `t_test` VALUES ('fff');CREATE DEFINER=`root`@`%` PROCEDURE `sp_test`(
out t_count int
)
begin
select count(*) into @t_count from t_test;
set t_count=@t_count;
end;上面是一个关于out参数的存储过程实验,这个存储过程统计了下表t_test中的记录数,t_count做为存储过程一个out参数;
资料上说out参数"从存储过程内部传值给调用者",哪位大哥给指点下,这个"从存储过程内部传值给调用者"具体是怎么实现的,比如我要用C++程序调用这个存储过程,调完之后,我要获取到t_count的值,怎么做。不是在存储过程中加个select t_count;我不希望C++程序读取结果集,只让其获取那个out参数的值,谢谢!

解决方案 »

  1.   

    调用:call sp_test(@t_count);
    获取值:select @t_count;
      

  2.   

    如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。
    如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;就这句,使用out类型参数,mysql存储过程返回值,这个返回值如何获取?
      

  3.   


    恩,这样可以获取到具体行数,但是存储过程如果不是我手动调用了,而是C++程序调用了,C++程序如何获取到@t_count。
      

  4.   

    存入表中再取,
    MYSQL HELP:
    mysql_query(mysql, "CALL p1(@param1, @param2)");
    mysql_query(mysql, "SELECT @param1, @param2");
    result = mysql_store_result(mysql);
    row = mysql_fetch_row(result);
    mysql_free_result(result);
      

  5.   

    set @t_count=10;
    直接call sp_test(@t_count);