Oracle写一个部门表dept2(数据至少15条)的分页存储过程,并使用java代码调用输出在jsp页面上实现分页。
时间: 2024-02-12 13:07:28 浏览: 130
oracle 在一个存储过程中调用另一个返回游标的存储过程
5星 · 资源好评率100%
好的,我来简单介绍下分页存储过程的实现思路:
1. 首先需要获取总记录数,以及每页显示的记录数。
2. 根据传入的页码,计算出起始记录的位置和结束记录的位置。
3. 使用SQL语句查询对应页数的数据,并返回给调用者。
下面是实现分页存储过程的Oracle SQL代码:
```
CREATE OR REPLACE PROCEDURE paged_dept2
(
p_page_num IN NUMBER,
p_page_size IN NUMBER
)
IS
v_total_record NUMBER;
v_start_record NUMBER;
v_end_record NUMBER;
BEGIN
-- 获取总记录数
SELECT COUNT(*) INTO v_total_record FROM dept2;
-- 计算起始记录位置和结束记录位置
v_start_record := (p_page_num - 1) * p_page_size + 1;
v_end_record := v_start_record + p_page_size - 1;
-- 使用SQL语句查询对应页数的数据
SELECT * FROM
(
SELECT d.*, ROWNUM rn FROM dept2 d
WHERE ROWNUM <= v_end_record
)
WHERE rn >= v_start_record;
END;
```
接下来是使用Java代码调用存储过程,并输出到JSP页面的实现:
```java
try {
// 建立数据库连接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "username", "password");
// 准备调用存储过程的SQL语句
String sql = "{ call paged_dept2(?, ?) }";
// 创建CallableStatement对象
CallableStatement cstmt = conn.prepareCall(sql);
// 设置输入参数
cstmt.setInt(1, pageNum); // 页码
cstmt.setInt(2, pageSize); // 每页显示的记录数
// 执行存储过程
ResultSet rs = cstmt.executeQuery();
// 输出数据到JSP页面
out.println("<table>");
while (rs.next()) {
out.println("<tr>");
out.println("<td>" + rs.getInt("deptno") + "</td>");
out.println("<td>" + rs.getString("dname") + "</td>");
out.println("<td>" + rs.getString("loc") + "</td>");
out.println("</tr>");
}
out.println("</table>");
// 关闭资源
rs.close();
cstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
```
其中,pageNum和pageSize分别表示页码和每页显示的记录数,out是JSP页面的输出流。
阅读全文