首页 / ORACLE / oracle 存储过程分页
oracle 存储过程分页
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle 存储过程分页,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4086字,纯文字阅读大概需要6分钟。
内容图文
将分页的存储过程封装到包中,包规范
create or replace package pkg_query as type cur_query is ref cursor; PROCEDURE prc_query (p_tableName invarchar2, --表名 p_strWhere invarchar2, --查询条件 p_orderColumn invarchar2, --排序的列 p_orderStyle invarchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条数 p_totalRecords out Number, --总记录数 p_totalPages out Number, --总页数 v_cur out pkg_query.cur_query); --返回的结果集end pkg_query;
包体的实现如下
create or replace package body pkg_query asPROCEDURE prc_query (p_tableName invarchar2, --表名 p_strWhere invarchar2, --查询条件 p_orderColumn invarchar2, --排序的列 p_orderStyle invarchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条数 p_totalRecords out Number, --总记录数 p_totalPages out Number, --总页数 v_cur out pkg_query.cur_query) --返回的结果集IS v_sql VARCHAR2(1000) :=‘‘; --sql语句 v_startRecord Number(4); --开始显示的记录条数 v_endRecord Number(4); --结束显示的记录条数BEGIN--记录中总记录条数 v_sql :=‘SELECT COUNT(1) FROM ‘|| p_tableName ||‘ WHERE 1=1 ‘; IF p_strWhere ISNOTNULLor p_strWhere <>‘‘THEN v_sql := v_sql ||‘ and ‘|| p_strWhere; ENDIF; EXECUTE IMMEDIATE v_sql INTO p_totalRecords; --验证页面记录大小IF p_pageSize <0THEN p_pageSize :=0; ENDIF; --根据页大小计算总页数IF MOD(p_totalRecords,p_pageSize) =0THEN p_totalPages := p_totalRecords / p_pageSize; ELSE p_totalPages :=floor(p_totalRecords / p_pageSize) +1; ENDIF; --验证页号IF p_curPage <1THEN p_curPage :=1; ENDIF; IF p_curPage > p_totalPages THEN p_curPage := p_totalPages; ENDIF; --实现分页查询 v_startRecord := (p_curPage -1) * p_pageSize +1; v_endRecord := p_curPage * p_pageSize; v_sql :=‘SELECT * FROM (SELECT a.*, rownum rn FROM ‘||‘(SELECT * FROM ‘|| p_tableName; IF p_strWhere ISNOTNULLor p_strWhere <>‘‘THEN v_sql := v_sql ||‘ WHERE 1=1 and ‘|| p_strWhere; ENDIF; IF p_orderColumn ISNOTNULLor p_orderColumn <>‘‘THEN v_sql := v_sql ||‘ ORDER BY ‘|| p_orderColumn ||‘‘|| p_orderStyle; ENDIF; v_sql := v_sql ||‘) a WHERE rownum <= ‘|| v_endRecord ||‘) WHERE rn >= ‘|| v_startRecord; DBMS_OUTPUT.put_line(v_sql); OPEN v_cur FOR v_sql; END prc_query; end pkg_query;
c# 调用存储过程
private DataSet ExecuteProduce(string prodeceName, OracleParameter[] parms) { string connStr = ConfigurationManager. ConnectionStrings["RMS.DataAccess.Properties.Settings.ConnectionString"].ConnectionString; using (OracleConnection conn = new OracleConnection(connStr)) { if (conn.State != ConnectionState.Open) { conn.Open(); } OracleCommand cmd = new OracleCommand(prodeceName, conn); cmd.CommandType = CommandType.StoredProcedure; if (parms != null) { cmd.Parameters.AddRange(parms); } OracleDataAdapter oadp = new OracleDataAdapter(cmd); DataSet ds = new DataSet(); oadp.Fill(ds); return ds; } } private DataSet Paging(string p_tableName, string p_strWhere, string p_orderColumn, string p_orderStyle, int p_curPage, int p_pageSize, refint p_totalRecords, refint p_totalPages) { string prodeceName = "pkg_query.prc_query"; OracleParameter[] parms = new OracleParameter[] { new OracleParameter("p_tableName",OracleType.VarChar), new OracleParameter("p_strWhere",OracleType.VarChar), new OracleParameter("p_orderColumn",OracleType.VarChar), new OracleParameter("p_orderStyle",OracleType.VarChar), new OracleParameter("p_curPage",OracleType.Number), new OracleParameter("p_pageSize",OracleType.Number), new OracleParameter("p_totalRecords",OracleType.Number), new OracleParameter("p_totalPages",OracleType.Number), new OracleParameter("v_cur",OracleType.Cursor) }; parms[4].Direction = ParameterDirection.InputOutput; parms[5].Direction = ParameterDirection.InputOutput; parms[6].Direction = ParameterDirection.Output; parms[7].Direction = ParameterDirection.Output; parms[8].Direction = ParameterDirection.Output; parms[0].Value = p_tableName; parms[1].Value = p_strWhere; parms[2].Value = p_orderColumn; parms[3].Value = p_orderStyle; parms[4].Value = p_curPage; parms[5].Value = p_pageSize; DataSet ds = ExecuteProduce(prodeceName, parms); p_totalRecords = Convert.ToInt32(parms[6].Value); p_totalPages = Convert.ToInt32(parms[7].Value); return ds; }
原文:http://www.cnblogs.com/guohu/p/3520909.html
内容总结
以上是互联网集市为您收集整理的oracle 存储过程分页全部内容,希望文章能够帮你解决oracle 存储过程分页所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。