/***************************************************** 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程序。它能够接收参数,并根据这些参数执行复杂的逻辑操作,如数据查询、更新等。通过...
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
本篇文章将深入探讨MySQL存储过程在实现通用分页中的应用。 首先,让我们理解什么是分页。分页是数据库查询结果的一种展示方式,它将大量的数据分成若干个小部分,每次只显示一部分,这样用户可以逐页浏览,避免一...
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
在SQL Server数据库管理中,分页查询是一种...这样的通用分页存储过程提高了代码复用性,降低了维护成本,同时使得分页查询更加灵活和高效。对于大型数据库应用,这是非常实用的一个工具,值得在实际项目中推广和使用。
"SQL通用分页存储过程"就是一种专门用于实现分页查询的存储过程,它可以接收用户输入的参数,灵活地返回指定页码的数据。 首先,我们需要理解分页的基本概念。在数据库查询中,如果一次性获取所有数据可能导致内存...
要实现Oracle和MSSQL的通用分页存储过程,可以使用动态SQL。首先,根据数据库类型选择合适的分页语句,然后将分页参数(如页号、每页记录数)传入存储过程。这需要对两种数据库的语法有一定了解,并且可能需要处理...
### 通用分页存储过程与ASPX页面中的调用方法 #### 一、分页存储过程概述 在数据库操作中,分页是非常常见且重要的功能之一。尤其在处理大量数据时,分页能够显著提高用户体验并减少服务器负载。本文介绍了一个...
下面是一个基于MySQL的例子,展示了一个通用的分页存储过程: ```sql DELIMITER // CREATE PROCEDURE GetPagedData(IN page INT, IN pageSize INT, IN tableName VARCHAR(255), IN orderColumn VARCHAR(255)) BEGIN...
本压缩包"SQL Server 2005通用分页存储过程.rar"包含了一个名为"SQL Server 2005通用分页存储过程.mht"的文件,很可能是详细讲解如何创建和使用分页存储过程的文档。 首先,我们要理解什么是存储过程。存储过程是预...
以下是一个通用分页存储过程的概述: 1. **参数定义**:存储过程需要接收两个主要参数,一个是当前页数(@CurrentPage),另一个是每页记录数(@PageSize)。有时,还需要一个总记录数参数(@TotalRows),用于返回...
创建一个通用的分页存储过程,我们需要考虑以下参数: 1. 输入查询(通常作为字符串参数传递):这是用户要执行的查询,不包含分页条件。 2. 开始行号(start_row):指定要开始显示的行号,通常从1开始。 3. 行数...
### 新手通用分页存储过程 #### 背景与目的 在开发基于数据库的应用程序时,为了提高用户体验和减少服务器负担,分页查询是非常常见且重要的一个功能。本篇文章将详细介绍如何使用 SQL Server 2005 中的 `ROW_...
DB2的通用分页存储过程是数据库管理系统中用于高效处理大量数据的一种技术,它允许用户在不加载整个数据集的情况下,只获取特定页面的数据。在DB2中,这个功能通过自定义存储过程实现,可以适应各种不同的查询需求,...
在提供的"stu.sql"文件中,可能包含了具体的分页存储过程实现或者示例数据。通过分析和运行这个脚本,你可以更好地理解如何在Oracle环境中实现存储过程的分页功能,并将其应用于实际项目中。 总之,Oracle存储过程...
本文将详细解析"经典的分页、排序SQL 通用存储过程"所涉及的知识点,并给出如何实现这样的存储过程。 首先,分页是数据库查询中的一种优化策略,用于限制每次查询返回的结果数量,从而避免一次性加载大量数据导致的...
oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...