CREATE PROCEDURE PAGINATION_NAME11(IN IN_C INTEGER(11))BEGIN
--输入参数为列名,这样可以行吗,怎么处理这种问题。 
SET @USERID=C;
PREPARE STMT FROM 'select * from table_name where @USERID=1';EXECUTE STMT ;
 
END
运行过程没有记录,怎么回事? 谢谢!

解决方案 »

  1.   

     @USERID=1这个条件永远为假。怎么会有记录?
      

  2.   

    可能是我没有写清楚。
    主要是想实现where条件中的列是动态的,过程的输入参数这动态列,如:
            select * from 表名 where 输入参数(表中的某列)='key';
      

  3.   

    DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`sp_test2`$$CREATE PROCEDURE `test`.`sp_test2`()
    BEGIN
    set @userid = 1;
    set @stmt = concat("select * from t1 where p_c = ",@userid);
    prepare s1 from @stmt;
    execute s1;
    deallocate prepare s1;END$$DELIMITER ;select * from t1;
    query result(1 records)
    p_c p_time 
    1 10:59:48 
    call sp_test2();query result(1 records)
    p_c p_time 
    1 10:59:48 
      

  4.   

    http://dev.mysql.com/doc/refman/5.1/zh/restrictions.html
    I.1. 对存储子程序和触发程序的限制
    ·         SQL预处理语句(PREPARE、EXECUTE、DEALLOCATE PREPARE)。隐含意义:不能在存储子程序中使用动态SQL语句(其中,能够以字符串形式构造动态语句,然后执行它们)。从MySQL 5.0.13开始,对于存储程序放宽了该限制,但该限制仍适用于存储函数和触发程序。