create procedure ray_prc_pagelist
(    IN    p_table_name        VARCHAR(1024),        /*表名*/
    IN    p_fields            VARCHAR(1024),        /*查询字段*/
    IN    p_page_size            INT,                /*每页记录数*/
    IN    p_page_now            INT,                /*当前页*/
    IN    p_order_string        VARCHAR(128),        /*排序条件(包含ORDER关键字,可为空)*/
    IN    p_where_string        VARCHAR(1024),        /*WHERE条件(包含WHERE关键字,可为空)*/
    OUT    p_out_rows            INT                    /*输出记录总数*/
    
)
NOT DETERMINISTIC
SQL SECURITY DEFINER
 COMMENT '分页存储过程'
    
BEGIN    /*定义变量*/
    DECLARE m_begin_row INT DEFAULT 0;
    DECLARE m_limit_string CHAR(64);    /*构造语句*/    
    SET m_begin_row = (p_page_now - 1) * p_page_size;
    SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size);
    
    SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string);
    SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string);    /*预处理*/
    PREPARE count_stmt FROM @COUNT_STRING;
    EXECUTE count_stmt;
    DEALLOCATE PREPARE count_stmt;
    SET p_out_rows = @ROWS_TOTAL;    PREPARE main_stmt FROM @MAIN_STRING;
    EXECUTE main_stmt;
    DEALLOCATE PREPARE main_stmt;
    
END;

解决方案 »

  1.   

    错误信息是什么? 为什么不愿意把错误信息同时贴出来以供大家分析?你执行时有没有加 delimiter $$
      

  2.   

    delimiter $$;create procedure ray_prc_pagelist
    (   IN    p_table_name        VARCHAR(1024),        /*表名*/
       IN    p_fields            VARCHAR(1024),        /*查询字段*/
       IN    p_page_size            INT,                /*每页记录数*/
       IN    p_page_now            INT,                /*当前页*/
       IN    p_order_string        VARCHAR(128),        /*排序条件(包含ORDER关键字,可为空)*/
       IN    p_where_string        VARCHAR(1024),        /*WHERE条件(包含WHERE关键字,可为空)*/
       OUT    p_out_rows            INT                    /*输出记录总数*/
      
    )
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
      COMMENT '分页存储过程'
      
    BEGIN   /*定义变量*/
       DECLARE m_begin_row INT DEFAULT 0;
       DECLARE m_limit_string CHAR(64);   /*构造语句*/   
       SET m_begin_row = (p_page_now - 1) * p_page_size;
       SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size);
      
       SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string);
       SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string);   /*预处理*/
       PREPARE count_stmt FROM @COUNT_STRING;
       EXECUTE count_stmt;
       DEALLOCATE PREPARE count_stmt;
       SET p_out_rows = @ROWS_TOTAL;   PREPARE main_stmt FROM @MAIN_STRING;
       EXECUTE main_stmt;
       DEALLOCATE PREPARE main_stmt;
      
    END;
    $$