• 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));
    }

  • 相关阅读:
    就为了一个原子操作,其他CPU核心罢工了
    浅谈JVM和垃圾回收
    简单了解一下K8S,并搭建自己的集群
    WebAssembly完全入门——了解wasm的前世今身
    【简单了解系列】从基础的使用来深挖HashMap
    【俗话说】换个角度理解TCP的三次握手和四次挥手
    两分钟让你明白Go中如何继承
    游戏服务器和Web服务器的区别
    Go中使用seed得到相同随机数的问题
    从web到游戏,走出舒适区
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2744798.html
Copyright © 2020-2023  润新知