zoukankan      html  css  js  c++  java
  • 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));
    }

  • 相关阅读:
    模拟器登陆
    mab算法
    用户投票排名算法总结
    vue中路由
    利用ajax全局设置实现拦截器
    对于 前端请求Django 后端服务出现403 Forbidden (CSRF token missing or incorrect.) 问题的解析
    Datatable 插入一行数据到第一行
    Datatable 导出到execl 官网demo
    jquery cookie操作
    on绑定事件支持的事件类型
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2744798.html
Copyright © 2011-2022 走看看