DELIMITER $$CREATE DEFINER=`dba`@`%` PROCEDURE `mydb`.`sp_total`(IN p_table VARCHAR(100), OUT p_total INT)
BEGIN
SET @sql = CONCAT('SELECT COUNT(1) INTO ', p_total, ' FROM ', p_table);
PREPARE total FROM @sql;
EXECUTE total;
DEALLOCATE PREPARE total;
END$$DELIMITER ;调用时出错:
call sp_total('abc', @t); 
select @t;

解决方案 »

  1.   

    SET @sql = CONCAT('SELECT COUNT(1) INTO ', p_total, ' FROM ', p_table); 
    ...======》
    SET @sql = CONCAT('SELECT COUNT(1) INTO @cnt FROM ', p_table); ....
    set p_total = @cnt;
      

  2.   

    declare @zz integer
    SET @sql = CONCAT('SELECT COUNT(1) INTO @zz FROM ', p_table); 
    set p_total = @zz;
      

  3.   


    汗,WWWWB兄。
    @zz 是不需要声明的,它所处的块是SESSION 级别,不是BLOCK 级别。