`
hudeyong926
  • 浏览: 2017228 次
  • 来自: 武汉
社区版块
存档分类
最新评论

1>通用分页存储过程代码及调用

阅读更多
/*****************************************************
MySQL分页存储过程
吴剑 2009-07-02  
*****************************************************/
DROP PROCEDURE IF EXISTS pr_pager;
CREATE PROCEDURE pr_pager(
    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取记录调用:

call pr_pager('表名', '*', 25, 1, '', '', @count_rows);
call pr_pager('user', '*', 15, 2, '', 'where id>3', @count_rows);
call pr_pager('user', '*', 15, 1, 'group by password order by id desc', '', @count_rows);

2调用1后再取条数调用:

select @count_rows; 
select @MAIN_STRING //select sql
select @COUNT_STRING  //seelct count sql

支持多表级联 ,分组 :call pr_pager('job j left join enter_job ej on j.job_no=ej.job_no','j.*,ej.*','25','1','group by ej.put_away_user order by ej.put_away_user desc','where j.job_table="enter"',@p_out_rows);

普通的查询,只返回一个结果集,而存储过程却返回至少两个结果集,其中一个就是存储过程的执行状态。我们必须要清除了这个执行状态以后,才可能再次调用另外一个存储过程

<?php
$rs=mysql_query("call pr_pager('change_monitor','*',10,1,'','',@p_out_rows)");
while($rows=mysql_fetch_array($rs)){
	echo $rows[Schedule];
}
$query=mysql_query("select @p_out_rows");
$v=mysql_fetch_array($query); 

can't return a result set in the given context

需要php调用存储过程,返回一个结果集,发现很困难,找了半天,终于在老外的论坛上找到解决方案,这里本地化一下。

关键就是两点

1)define('CLIENT_MULTI_RESULTS', 131072);

2)$link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());

 

分享到:
评论

相关推荐

    Sql Server 通用分页存储过程(适用与 BootStrap Table)

    通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    Sql Server 通用分页存储过程(BootStrap Table)

    Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    通用分页存储过程

    sql通用分页存储过程,简单方便。可应用于多表联查,自定排序字段,多字段排序,支持分组查询。语句简单易懂,调用方便。

    通用分页存储过程(支持多表)

    存储过程调用存储过程,实现多表分页。灵活,方便

    一个通用的分页存储过程与在aspx页面中调用的方法

    一个通用的分页存储过程与在aspx页面中调用的方法 本存储过程本人在 mssql2005,ms sql2000,mysql ,oracle 中皆有调用 都能运行 但是在oracle中效率较慢 但是能用 在其他数据库中表现良好

    通用ORACLE存储过程实现分页和查询

    一个通用的存储过程,完成分页查询数据,只需要在查询的最后调用此过程,即可实现分页和按分页进行查询数据

    oracle查询分页条件通用存储过程

    oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...

    oracle和mssql分页存储过程-均通用

    ORACLE和mssql 高效的分页存储过程,均通用,直接调用即可

    通用的SQL server分页存储过程

    好东西,现在不用每个分页都写一个存储过程了,只要调用的时候,把参数设置好就OK了...

    对大数据通用存储过程分页demo

    一个通用存储过程分页(特别是对大数据很好用),里面包含liq to sql 和sap.net 调用他的实例方法

    通用SQL存储过程分页以及asp.net后台调用的方法

    创建表格并添加300万数据 use Stored CREATE TABLE UserInfo( --创建表 id int IDENTITY(1,1) PRIMARY KEY not null,--添加主键和标识列 UserName varchar(50) ...存储过程T-SQL create PROCEDURE [dbo].[GetDataLis

    一个基于ROW_NUMBER()的通用分页存储过程代码

    建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。 注意:数据量大、性能要求高的,请个性化处理。 代码如下: ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql VARCHAR(5000), @...

    分页 SQLServer存储过程

    /*–用存储过程实现的分页程序 显示指定表、视图、查询结果的第X页 对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法 如果视图或查询结果中有主键,不推荐此方法 –邹建 2003.09–*/ /*–...

    通用数据访问层及Ajax服务端框架源码20110907

    1. 数据访问全使用了我的通用数据访问层 + 存储过程的实现。 2. 页面使用了大量的Ajax技术,没有任何的直接提交或回传(Submit Form or postback),分页,查询,对话框,都以Ajax的方式实现。 3. 所有Ajax技术的...

    SQL2005 分页

    一个通用的SQL分页方法,是用存储过程写的,不需要关注 表的结构,只要会调用,以后就不要为SQL分页而烦劳了啊......

    EasyASP v2.1数据库操作类

    [数据库] 自带记录集分页和调用存储过程分页功能,拥有功能丰富的可完全自定义配置及调用。 [数据库] 能方便的执行带各种参数的MSSQL存储过程并返回多个值或多个记录集。 [数据库] 完善的数据库操作容错功能,能...

    Winson.Framework 1.0发布!

    否则显示自定义异常信息&lt;br&gt;9、通用的数据库底层操作,同时支持存储过程调用&lt;br&gt;10、方便地操作读取自定义配置文件的信息&lt;br&gt;&lt;br&gt;二、功能控件类:&lt;br&gt;&lt;br&gt;1、漂亮的自定义警告框,可为警告框设置相应的事件&lt;br&gt;2、...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    SQL优化通用类/特殊字符过滤/优化查询排序/异常记录

    SQL/SqlParameter特殊字符过滤/优化查询排序/异常记录row_number()over(order by {1})as row 排序 not in 排序 SQL查询、更新、插入、分页排序,存储过程调用

Global site tag (gtag.js) - Google Analytics