• Oracle存储过程分页 详解



    --1、开发一个包
    create or replace package testpackage as
    --创建一个包,在该包中,定义了类型test_cursor ,是一个游标
    type test_cursor is ref cursor;
    end testpackage;

    --2、编写过程
    create or replace procedure splitPages
    ( tableName in varchar2, --表名
    pageSizes in number, --一页显示的记录数
    pageNow in number, --当前第几页
    pageRows out number, --总记录数
    pageCount out number, --总页数
    pageCursor out testpackage.test_cursor --返回记录集
    ) is
    --定义部分
    --定义sql语句, 字符串
    v_sql varchar2(1000);
    --定义两个整数
    v_begin number:= (pageNow-1)*pageSizes + 1;
    v_end number:= pageNow*pageSizes;
    begin
    --执行部分
    v_sql:= 'select * from
    (select t.*, rownum rn from (select * from '||tableName||') t) tt
    where tt.rn between '||v_begin||' and '||v_end;
    --把游标和sql关联
    open pageCursor for v_sql;
    --计算myrows
    --组织一个sql
    v_sql:='select count(*) from '||tableName;
    --执行sql 并把返回的值 赋值给pageRows
    execute immediate v_sql into pageRows;
    --计算pageCount
    pageCount:=(pageRows-1)/pageSizes + 1;
    --关闭游标 注意这里不能关闭游标
    --close pageCursor;
    end;
    /

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");
    //调用存储过程
    CallableStatement proc = conn.prepareCall("{call splitPages(?, ?, ?, ?, ?, ?)}");
    //给输入参数传值
    proc.setString(1, "emp"); //表名
    proc.setInt(2, 3); //一页显示的记录数
    proc.setInt(3, 1); //当前第几页
    //声明输出参数是什么类型
    proc.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); //总记录数
    proc.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); //总页数
    proc.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); //返回记录集
    //执行
    proc.execute();
    int pageRows = proc.getInt(4);
    int pageCount = proc.getInt(5);
    System.out.println("总行数="+pageRows);
    System.out.println("总页数="+pageCount);
    ResultSet rs = (ResultSet)proc.getObject(6);
    while(rs.next()){
    System.out.println(rs.getInt(1) +" "+rs.getString(2)+" "+rs.getString(3));
    }

  • 相关阅读:
    python学习(20) 网络编程
    MySQL与mongodb数据库备份与恢复
    Java(一)——Ubuntu18.04下Java环境配置
    安全服务——CVE中CVSS相关指标介绍
    爬虫(十一)—— 请求库(三)pypeteer请求库
    爬虫(十)—— scrapy框架
    抓包工具Fiddler
    爬虫(九)—— 爬虫高性能
    爬虫(八)—— 存储库(三)MySQL存储库
    爬虫(七)—— 存储库(二)Redis存储库
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2744798.html
Copyright © 2020-2023  润新知