Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
2012-08-07 16:15
411 查看
-- 先创建包 CREATE OR REPLACE PACKAGE mypackage AS TYPE mycursor IS REF CURSOR; END;
--创建分页存储过程 CREATE OR REPLACE PROCEDURE splitpage ( v_tableName IN VARCHAR2, v_pageSize IN NUMBER, v_pageNow IN NUMBER, v_myTotalRows OUT NUMBER, v_myTotalPageCount OUT NUMBER, v_cursor OUT mypackage.mycursor ) IS v_sql VARCHAR2(1000); v_begin NUMBER:=(v_pageNow-1)*v_pageSize+1; v_end NUMBER:=v_pageNow*v_pageSize; BEGIN v_sql:='select * from( select rownum rn,a1.* from( select * from ' ||v_tableName|| ') a1 where rownum<='||v_end|| ') where rn>='||v_begin||''; OPEN v_cursor FOR v_sql; v_sql:='select count(*) from ' ||v_tableName||''; EXECUTE IMMEDIATE v_sql INTO v_myTotalRows; IF MOD(v_myTotalRows,v_pageSize)=0 THEN v_myTotalPageCount:=v_myTotalRows/v_pageSize; ELSE v_myTotalPageCount:=v_myTotalRows/v_pageSize+1; END IF; END;
public YOURClass getSplitPage(int targetPage, int eachpagenum){ Connection conn = DBConnection.getConn();//获取Oraccle 的Connection //参数位置要与存储过程对应,其余用法跟pstmt类似 String sql = "{call splitpage(?,?,?,?,?,?)}"; try{ cs = conn.prepareCall(sql); cs.setString(1,"tablename"); // the name of db's table cs.setInt(2,eachpagenum); // Each page record numbers cs.setInt(3,targetPage); // Target page number // register the output cs.registerOutParameter(4,OracleTypes.NUMBER); cs.registerOutParameter(5,OracleTypes.NUMBER); cs.registerOutParameter(6,OracleTypes.CURSOR); cs.execute(); // get the value from CallableStatement totalRowsCount = cs.getInt(4); // 获取总记录数 totalPagesCount = cs.getInt(5);// 获取总页数 ResultSet rs = (ResultSet) cs.getObject(6); while(rs.next()){ // 从rs中读取数据 } return YOURClass; }catch (SQLException e){ e.printStackTrace(); } return null; }
下面就不给出JAVA代码了,因为都是类似的。用法跟pstmt一样,只是多了注册输出变量。
--带模糊查询的分页 CREATE OR REPLACE PROCEDURE splitpagefuzzy ( v_tableName IN VARCHAR2, v_colName IN VARCHAR2, v_keyword IN VARCHAR2, v_pageSize IN NUMBER, v_pageNow IN NUMBER, v_myTotalRows OUT NUMBER, v_myTotalPageCount OUT NUMBER, v_cursor OUT mypackage.mycursor ) IS v_sql VARCHAR2(1000); v_begin NUMBER:=(v_pageNow-1)*v_pageSize+1; v_end NUMBER:=v_pageNow*v_pageSize; BEGIN v_sql:='select * from( select rownum rn,a1.* from( select * from ' ||v_tableName||' where '||v_colName||' like ''%'|| v_keyword ||'%'' '|| ') a1 where rownum<='||v_end|| ') where rn>='||v_begin||''; OPEN v_cursor FOR v_sql; v_sql:='select count(*) from ' ||v_tableName||''; EXECUTE IMMEDIATE v_sql INTO v_myTotalRows; IF MOD(v_myTotalRows,v_pageSize)=0 THEN v_myTotalPageCount:=v_myTotalRows/v_pageSize; ELSE v_myTotalPageCount:=v_myTotalRows/v_pageSize+1; END IF; END;
--带模糊查询带排序的分页 CREATE OR REPLACE PROCEDURE splitpagefuzzyorder ( v_tableName IN VARCHAR2, v_colName IN VARCHAR2, v_keyword IN VARCHAR2, v_colOrder IN VARCHAR2, v_orderType IN VARCHAR2, v_pageSize IN NUMBER, v_pageNow IN NUMBER, v_myTotalRows OUT NUMBER, v_myTotalPageCount OUT NUMBER, v_cursor OUT mypackage.mycursor ) IS v_sql VARCHAR2(1000); v_begin NUMBER:=(v_pageNow-1)*v_pageSize+1; v_end NUMBER:=v_pageNow*v_pageSize; BEGIN v_sql:='select * from( select rownum rn,a1.* from( select * from ' ||v_tableName||' where '||v_colName||' like ''%'|| v_keyword ||'%'' '|| ' order by ' ||v_colOrder||' '||v_orderType|| ') a1 where rownum<='||v_end|| ') where rn>='||v_begin||''; OPEN v_cursor FOR v_sql; v_sql:='select count(*) from ' ||v_tableName||''; EXECUTE IMMEDIATE v_sql INTO v_myTotalRows; IF MOD(v_myTotalRows,v_pageSize)=0 THEN v_myTotalPageCount:=v_myTotalRows/v_pageSize; ELSE v_myTotalPageCount:=v_myTotalRows/v_pageSize+1; END IF; END;
--带模糊查询带排序带时间段的分页 CREATE OR REPLACE PROCEDURE splitpagefuzzyorderdate ( v_tableName IN VARCHAR2, v_colName IN VARCHAR2, v_keyword IN VARCHAR2, v_colOrder IN VARCHAR2, v_orderType IN VARCHAR2, v_colDate IN DATE; v_dateBegin IN DATE, v_dateEnd IN DATE, v_pageSize IN NUMBER, v_pageNow IN NUMBER, v_myTotalRows OUT NUMBER, v_myTotalPageCount OUT NUMBER, v_cursor OUT mypackage.mycursor ) IS v_sql VARCHAR2(1000); v_begin NUMBER:=(v_pageNow-1)*v_pageSize+1; v_end NUMBER:=v_pageNow*v_pageSize; BEGIN v_sql:='select * from( select rownum rn,a1.* from( select * from ' ||v_tableName||' where '||v_colName||' like ''%'|| v_keyword ||'%'' '|| ' and ' v_colDate||' between ' v_dateBegin ||' and '||v_dateEnd || ' order by ' ||v_colOrder||' '|| ') a1 where rownum<='||v_end|| ') where rn>='||v_begin||''; OPEN v_cursor FOR v_sql; v_sql:='select count(*) from ' ||v_tableName||''; EXECUTE IMMEDIATE v_sql INTO v_myTotalRows; IF MOD(v_myTotalRows,v_pageSize)=0 THEN v_myTotalPageCount:=v_myTotalRows/v_pageSize; ELSE v_myTotalPageCount:=v_myTotalRows/v_pageSize+1; END IF; END;
这几个下来想必大家也都清楚该怎么做了。如果需要添加什么条件,只需要在最内层字句中添加相应语句。
相关文章推荐
- Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
- 专题 查找与排序的Java代码实现(一)
- 代码实现模糊搜索,以及排序
- Java中选择,冒泡,快排原理代码 阶层 数组的排序 数组的排序 以及代码大全
- 排序与查找简单算法 java代码实现
- Java代码为例讲解堆的性质和基本操作以及排序方法
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- 面试前的准备(java专业 ~学习算法排序以及查找)
- JAVA_WEB项目之Lucene检索框架实现增删查改的代码优化以及分页功能实现
- oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
- Lucene 3.6.1:中文分词、创建索引库、排序、多字段分页查询以及高亮显示
- mongodb java增删该查和模糊、排序和分页查询
- Java实现分页展示,包括前后台java实现以及测试代码
- Oracle sql以某个汉字的字段的汉语拼音作为排序,java代码排序不能按要求显示序列号
- 查找与排序-----java代码分析
- AngularJS实现购物车模糊查询,价格区间查找,根据名字删除,点击排序
- Java 二叉查找(排序)树 创建 以及中序和层序遍历
- Mongodb 3.2 Java 显示指定字段 条件查询 分页排序
- oracle存储过程打包,以及在java代码中的调用
- oracle存储过程分页以及在java中调用