/***************************************************** 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通用分页存储过程,简单方便。可应用于多表联查,自定排序字段,多字段排序,支持分组查询。语句简单易懂,调用方便。
存储过程调用存储过程,实现多表分页。灵活,方便
一个通用的分页存储过程与在aspx页面中调用的方法 本存储过程本人在 mssql2005,ms sql2000,mysql ,oracle 中皆有调用 都能运行 但是在oracle中效率较慢 但是能用 在其他数据库中表现良好
一个通用的存储过程,完成分页查询数据,只需要在查询的最后调用此过程,即可实现分页和按分页进行查询数据
oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...
ORACLE和mssql 高效的分页存储过程,均通用,直接调用即可
好东西,现在不用每个分页都写一个存储过程了,只要调用的时候,把参数设置好就OK了...
一个通用存储过程分页(特别是对大数据很好用),里面包含liq to sql 和sap.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
建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。 注意:数据量大、性能要求高的,请个性化处理。 代码如下: ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql VARCHAR(5000), @...
/*–用存储过程实现的分页程序 显示指定表、视图、查询结果的第X页 对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法 如果视图或查询结果中有主键,不推荐此方法 –邹建 2003.09–*/ /*–...
1. 数据访问全使用了我的通用数据访问层 + 存储过程的实现。 2. 页面使用了大量的Ajax技术,没有任何的直接提交或回传(Submit Form or postback),分页,查询,对话框,都以Ajax的方式实现。 3. 所有Ajax技术的...
一个通用的SQL分页方法,是用存储过程写的,不需要关注 表的结构,只要会调用,以后就不要为SQL分页而烦劳了啊......
[数据库] 自带记录集分页和调用存储过程分页功能,拥有功能丰富的可完全自定义配置及调用。 [数据库] 能方便的执行带各种参数的MSSQL存储过程并返回多个值或多个记录集。 [数据库] 完善的数据库操作容错功能,能...
否则显示自定义异常信息<br>9、通用的数据库底层操作,同时支持存储过程调用<br>10、方便地操作读取自定义配置文件的信息<br><br>二、功能控件类:<br><br>1、漂亮的自定义警告框,可为警告框设置相应的事件<br>2、...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
SQL/SqlParameter特殊字符过滤/优化查询排序/异常记录row_number()over(order by {1})as row 排序 not in 排序 SQL查询、更新、插入、分页排序,存储过程调用