Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
来源:互联网 发布:sql注入测试网站 编辑:程序博客网 时间:2024/05/18 14:23
-- 先创建包
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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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一样,只是多了注册输出变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
--带模糊查询的分页
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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--带模糊查询带排序的分页
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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--带模糊查询带排序带时间段的分页
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;
这几个下来想必大家也都清楚该怎么做了。如果需要添加什么条件,只需要在最内层字句中添加相应
0 0
- Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
- Postgrel 查找模糊字段
- Oracle查找排序,模糊查询,外连接
- 模糊查找排序
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- oracle 分页存储过程代码
- oracle存储过程分页代码
- Mssql分页存储过程(任意字段排序)
- asp.net 存储过程分页字段排序
- 通用高效分页存储过程代码--针对单一字段排序分页
- oracle存储过程分页以及在java中调用
- java Oracle存储过程分页
- java Oracle存储过程分页
- java Oracle存储过程分页
- oracle根据存储过程中内容查找存储过程名
- iOS多线程编程之NSThread的使用
- 程序的基础
- 黑马程序员—jdk1.5新特性
- POJ 2386 Lake Counting(DFS)
- 题目1151:位操作练习
- Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- Java生成和解析XML格式文件和字符串
- My New Life!
- 地图开发--逆地理编码regeocoding
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- iOS的基本的设计模式
- 提取海量文本文件中含有指定字符串的行
- debian 设置开机自启动