最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle存储过程实现分页

来源:动视网 责编:小采 时间:2020-11-09 11:52:21
文档

Oracle存储过程实现分页

Oracle存储过程实现分页:--book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCHAR2(100),book_publish VARCHAR2(100)); --in表示输入参数,默 --book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCH
推荐度:
导读Oracle存储过程实现分页:--book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCHAR2(100),book_publish VARCHAR2(100)); --in表示输入参数,默 --book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCH


--book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCHAR2(100),book_publish VARCHAR2(100)); --in表示输入参数,默

--book表
CREATE TABLE book(
book_id VARCHAR2(20),
book_name VARCHAR2(100),
book_publish VARCHAR2(100)
);

--in表示输入参数,默认为in
--out 表示输出参数
CREATE OR REPLACE PROCEDURE sp_pro7(spBookId IN VARCHAR2, spBookName in VARCHAR2, spBookPub VARCHAR2)
IS
BEGIN
INSERT INTO book VALUES(spBookId, spBookName,spBookPub);
END;

--返回单个值
CREATE OR REPLACE PROCEDURE sp_pro8(spBookId IN VARCHAR2, spBookName OUT VARCHAR2)
IS
BEGIN
SELECT t.book_name INTO spBookName FROM book t WHERE t.book_id = spBookId;
END;

--返回结果集
--1 建立一个游标
CREATE OR REPLACE PACKAGE testPackage AS
TYPE test_cursor IS REF CURSOR;
END testPackage;
--2 创建过程
CREATE OR REPLACE PROCEDURE sp_pro9(spBookId VARCHAR2, sp_cursor OUT testPackage.test_cursor) IS
BEGIN
OPEN sp_cursor FOR SELECT t.book_id,t.book_name,t.book_publish FROM book t;
END;

--分页
SELECT *
FROM (SELECT ROWNUM RN, T.* FROM BOOK T WHERE ROWNUM < 5)
WHERE RN > 2;

CREATE OR REPLACE PROCEDURE fenye(
tablename VARCHAR2,
pageSize NUMBER, -- 一页显示的记录数
pageNow NUMBER, --当前页数
myRows OUT NUMBER, --总记录数
myPageCount OUT NUMBER,
sp_cursor OUT testPackage.test_cursor) IS
v_sql VARCHAR2(1000);
v_begin NUMBER:=(pageNow - 1) * pageSize + 1;
v_end NUMBER:=(pageNow) * pageSize;
BEGIN
v_sql:='SELECT * FROM (SELECT ROWNUM RN, T.* FROM '|| tablename || ' T WHERE ROWNUM < '|| v_end || ') WHERE RN > '|| v_begin;
OPEN sp_cursor FOR v_sql;
--计算myrows mypagecount
v_sql := 'SELECT COUNT(*) FROM '|| tablename;
--快速执行sql,并将结果赋值给myrows
EXECUTE IMMEDIATE v_sql INTO myrows;
IF MOD(myrows, pageSize) = 0 THEN
myPageCount:=myrows / pageSize;
ELSE
myPageCount:=myrows / pageSize + 1;
END IF;
--关闭游标
CLOSE sp_cursor;
END;

package com.leeket;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

/**
* @author Administrator
* @description 分页
*/
public class TestProcedure4 {

public static void main(String[] args) {

CallableStatement call = null;
Connection conn = null;
ResultSet rs = null;
try {

Class.forName("Oracle.jdbc.driver.OracleDriver");
conn = DriverManager
.getConnection("jdbc:oracle:thin:pas_perf/pas_perf@localhost:1521:orcl");
call = conn.prepareCall("{call fenye(?,?,?,?,?,?)}");
call.setString(1, "BOOK");
call.setInt(2, 10);
call.setInt(3, 1);
call.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
call.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
call.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
call.execute();
//取出返回值 要注意问好的顺序
int num = call.getInt(4);
int myPageCount = call.getInt(5);
rs = (ResultSet)call.getObject(6);
if (rs != null)
while (rs.next()) {
System.out.println(num + "\t" + myPageCount + "\t" + rs.getString(2) + "\t" + rs.getString(3) + "\t" + rs.getString(4));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (call != null)
call.close();
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

文档

Oracle存储过程实现分页

Oracle存储过程实现分页:--book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCHAR2(100),book_publish VARCHAR2(100)); --in表示输入参数,默 --book表CREATE TABLE book(book_id VARCHAR2(20),book_name VARCH
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top