• oracle--分页过程demo1


    oracle分页过程demo1:
    
    --ROWNUM用法
    select o.*,rownum rn from (select * from emp) o where rownum<=10;
    
    select * from (select o.*,rownum rn from (select * from emp) o where rownum<=10) where rn>=6;
    
    1)、开发一个包
    建立一个包,在该包中定义类型为test_cursor的游标。
    --建立一个包
    
    create or replace package testpackage
    as
    type test_cursor is ref cursor;
    end testpackage;
    
    --开始编写分页的过程
    create or replace procedure fenye
    (
    tablename in varchar2,
    pagesize in number,--每页显示记录数
    pagenow in number,--页数
    myrows out number,--总记录数
    mypagecount out number,--总页数
    p_cursor out testpackage.test_cursor--返回的记录集
    )is
    --定义部分
    --定义sql语句字符串
    v_sql varchar2(1000);
    --定义两个整数
    v_begin number:=(pagenow-1)*pagesize+1;
    v_end number:=pagenow*pagesize;
    begin
    --执行部分
    v_sql:='select * from(select t1.*,rownum rn from (select * from '||tablename||') t1 where rownum<='||v_end||')where rn>='||v_begin;
    --把游标和sql关联
    open p_cursor for v_sql;
    --计算myrows和myPageCount
    --组织一个sql语句
    v_sql:='select count(*) from '||tablename;
    --执行sql,并把返回的值,赋给myrows
    execute immediate v_sql into myrows;--它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前
    --EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.
     --尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。 
    --计算myPageCount
    --if myrows%Pagesize=0 then 这样写是错的
    if mod(myrows,pagesize)=0 then
    mypagecount:=myrows/pagesize;
    else
    mypagecount:=myrows/pagesize+1;
    end if;
    --关闭游标
    --CLOSE P_CURSOR; --不要关闭,否则java调用该存储过程会报错
    end;
    
    package com.etc.test;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    public class CunChuDemo1 {
    public static void main(String[] args) {
    	try {
    		Class.forName("oracle.jdbc.driver.OracleDriver"); // 1.加载驱动
    		 // 2.得到连接
    		Connection ct = DriverManager.getConnection(
    				"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "orcl");
    		CallableStatement cs = ct.prepareCall("call fenye(?,?,?,?,?,?)"); // 3.创建CallableStatement
    		cs.setString(1, "emp"); //表名
    		cs.setInt(2, 5);//每页显示记录数
    		cs.setInt(3, 1);//页数
    		cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);  // 注册总记录数
    		cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); // 注册总页数
    		cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); // 注册返回的结果集
    		cs.execute();  //4、执行
    		 // 得到结果集
            // 取出总记录数 /这里要注意,getInt(4)中4,是由该参数的位置决定的
    		int rowNum=cs.getInt(4);
    		int pageCount=cs.getInt(5);
    		ResultSet rs=(ResultSet) cs.getObject(6);
    		  System.out.println("rowNum=" + rowNum);
              System.out.println("总页数=" + pageCount);
    
              while (rs.next()) {
                  System.out.println("编号:" + rs.getInt(1) + 
                          " 名字:" + rs.getString(2) + 
                          " 工资:" + rs.getFloat(6));
              }
    		  //5、关闭
    		rs.close();
    		cs.close();
    		ct.close();
    	} catch (Exception e) {
    		e.printStackTrace();
    	}			
    }
    }
    ======================================================================
    

      

  • 相关阅读:
    8 pandas模块,多层索引
    7 numpy 傅里叶,提取图片轮廓
    6 DataFrame处理丢失数据--数据清洗
    5 pandas模块,DataFrame类
    4 pandas模块,Series类
    3 numpy模块
    2 线性代数基础
    1 Ipython、Jupyter 入门
    jdk安装与环境变量配置(一劳永逸)
    对jsp可见域的变量感悟
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6323663.html
Copyright © 2020-2023  润新知