Oracle基础(五)pl/sql进阶(分页过程)

Oracle基础(五)pl/sql进阶(分页过程)

大家好,又见面了,我是全栈君。

   编写分页过程

        通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标。怎样在java中调用等内容的学习。

   1、无返回值的存储过程

     比如 1、能够向book表加入书,

       —建表

      Create table book(bookId number,bookName varchar250,publishHouse varchar250));

    —编写过程 in 表示变量为输入值。假设不写默觉得输入值,而不是输出变量,out为输出值

      Create or replace procedure  sp_pro7(spBookId in number,spbookName in varchar2,sppublishHouse in  varchar2)is

   Begin

     Insert into book valuse(spBookId ,spbookName,sppublishHouse  );

   End

 —java 中怎样调用

 

Package com.sp;
Importjava.sql.*;
Publicclass Test1{
 public static void main(string[] args){
 
   try{
    //1载入驱动
     Class.forName("Oracle.jdbc.driver.OracleDriver");
     Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");
    //2创建callablestatement
    Callablestatement cs=ct.preparecall(“{call sp_pro7(?,?,?

)}”)。 //给?赋值 Cs.setInt(1,10); Cs.setstring(2。“笑傲江湖”); Cs.setstring(3,"人民出版社"); //运行 Cs.execute();; } Catch(EXCEPTION E){ e.printstacktrace(); }Finally{ 关闭各个链接 } } }

2、有返回值的存储过程

  比如输入书编号返回书姓名

    Create or replace  procedure sp_pro8(spno in number,spkName out varchar2spsal out varchar2) is

  Begin

   select  ename spsal,into spName spsal form emp where empno=spno;

  End

在java中怎样调用

Package com.sp;Importjava.sql.*;  Publicclass Test1{     public static void main(string[] args){        try{       //1载入驱动       Class.forName("Oracle.jdbc.driver.OracleDriver");       Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");       //2创建callablestatement       Callablestatement cs=ct.preparecall(“{call sp_pro8(?,?)}”);       //给?赋值       Cs.setInt(1,7788);       Cs.registerOutParemeter(2,oracle.jdbc.oracleTyps.varchar)//运行        Cs.registerOutParemeter(3,oracle.jdbc.oracleTyps.double)//运行 //oracle.jdbc.oracleTyps.varchar 表示运行的类型       Cs.execute();        //取出返回值,要注意?顺序       String name=sc.getstring(2);       String job=cs.getstring(3);       System.out.println(“7788的名字”+name +“7788的工资”+sal);       }     Catch(EXCEPTION E){      e.printstacktrace();      }    Finally{  关闭各个链接      }     } }


3、有返回值的存储过程,以列表结果集的形式返回

       oracle存储过程本身没有返回时用out參数替代的。集合须要用package

        —建立包,定义类型test_cursor

       Create or replace packagetestpackage as

       Typetest_cursur is ref cursor;

   End testpackage

   建立存储过程

       Create or repalce procedure sp_pro9(spNo in number,P_cursor out tespackage,test_cursor) is

       begin

             Open p_cursor for select *from emp where depto-spNo;

    End;

怎样在java中调用

Package com.sp;Importjava.sql.*;Publicclass Test1{   public static void main(string[] args){      try{    //1载入驱动     Class.forName("Oracle.jdbc.driver.OracleDriver");     Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");    //2创建callablestatement     Callablestatement cs=ct.preparecall(“{call sp_pro9(?,?

)}”); //给?赋值 Cs.setInt(1,10); Cs.registerOutParemeter(2,oracle.jdbc.oracleTypes.cursor)

    //运行 
     Cs.execute();
    //取出返回值,要注意?顺序
     ResultSet rs=(ResultSet)cs.getObject(2);
     While (rs.next()){
       system.out.println(rs.getInt(1)+""+rs.getString(2));
          }
 
      }
   Catch(EXCEPTION E){
      e.printstacktrace();
    }
  Finally{
  关闭各个链接
 
      }
 
    }
 
  }


4、—-oracle
的分页规律介绍

      Sql>select t1.* rownum rn from(select * from emp) t1; 

     Sql>select  t1.* rownum rn from(select * from emp) t1 where rownum<=10;

  在分页的时候。能够

   Select *from(

      Sql>select t1.* rownum rn from(select * from emp) t1where rownum<=10;) where rn>=6;

    开发一个包

    Create or replace package  testpackage as

     Typetest_cursur is ref cursor;

  End  testpackage

5、–编写分写的过程  分页并按工资排序

     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_endnumber:=Pagenow *Pagesize ;

      Begin

    —运行部分

        v_sql:=’Select * from(

         Sql>select t1.* rownum rn from(select * from ‘||tableName||’ order by sal) 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;

         Executeimmediate v_sql into myrows;

         –计算mypagecount

    If  mod(myrows,pagesize)=0 then

        Mypagecount:=myrows/pagesize;

    Else

        Mypagecount:=myrows/pagesize+1;

    End if;

   —关闭游标

       Close p_cursor;

  End;

使用java測试

Package com.sp;Importjava.sql.*;  Public class Test1{  public static void main(string[] args){  try{    //1载入驱动<span style="font-family: Arial, Helvetica, sans-serif;">    </span>    Class.forName("Oracle.jdbc.driver.OracleDriver");<span style="font-family: Arial, Helvetica, sans-serif;"> </span>    Connetionct=DriverManger.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora1","scott","123");   //2创建callablestatement   Callablestatement cs=ct.preparecall(“{call fenye(?,?

,?,?

,?,?

)}”)。 //给?赋值 Cs.setString(1,"emp"); 表 Cs.setInt(2,5);每页大小 Cs.setInt(3,2);第2页 //接受总记录数 Cs.registerOutParemeter(4,oracle.jdbc.oracleTypes.integer)//运行 //注冊总页数 Cs.registerOutParemeter(5,oracle.jdbc.oracleTypes.integer)//运行 //注冊返回的结果集 Cs.registerOutParemeter(6,oracle.jdbc.oracleTypes.cursor)//运行 Cs.execute(); //取出总记录数,这里注意。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(20)+"薪水"。 } } } Catch(EXCEPTION E){ e.printstacktrace(); } Finally{ 关闭各个链接 } } }

      看似非常复杂一个分页过程,通过一步步由简到繁的分解,由无返回值的存储过程,到有返回值,进而到以集合形式作为返回值的存储过程,加上简单的分页算法。基于pl/sql中包,游标。mod语句,if分支语句。变量的定义,oder by子句组成。

学习的过程就是这样,一口一个胖子是不可能的。相同这也是人类认知的一个规律,由简到繁,在遇到复杂的问题要考虑怎样将它拆分成简单的,自己熟知的问题。一步步了解。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116564.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题

    蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题packageexec;importjava.util.Scanner;/**问题描述  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果

    2022年10月11日
    5
  • 信息系统项目的范围管理论文_高级项目管理师论文

    信息系统项目的范围管理论文_高级项目管理师论文本人参加了2019年上半年信息系统项目管理师考试,目前已经通过。论文我压了2篇,但是都没有压中,考场看到题目差点吐血,还好后面按照自己的思路也顺利过关。这里和大家分享一下我的论文资料,大家可以参考。摘要20xx年x月,我作为项目经理参与了深圳市某上市公司的生产管理系统项目。该项目总投资300万人民币,建设工期为10个月,通过项目的建设,实现了该公司物料管理、库存管理、生产工单、生产计划、生产派…

    2022年9月16日
    2
  • zencart模板如何设计「建议收藏」

    zencart模板如何设计「建议收藏」ZenCart的模板设计比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。  首先要阅读常见问答部分的:如何添加、制作新模板。ZenCart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了PHP代码。  通常,页面分为页眉(header),页脚(footer),边框(sideboxes)。所以设计页面的时候

    2022年7月27日
    4
  • Python编写网络爬虫–牛刀小试

    Python编写网络爬虫–牛刀小试本文参考网上的资料,编写简单的Python编写网络爬虫,做了网页内容的抓取,分析出链接的url并抓取。

    2022年6月17日
    30
  • 《老友记》典故集解 Season 1-10

    《老友记》典故集解 Season 1-10第一季第一集Mr.PotatoHead瑞秋和众人谈到了她逃婚的原因,她说这是因为她突然发现她的未婚夫巴里医生长得活像“薯头先生(Mr.PotatoHead)”,这是在美国家喻户晓的卡通人物。如果大家看过《玩具总动员(ToyStory)》,就会在里面发现他和他的夫人“薯头太太(Mrs.PotatoHead)”叽叽歪歪,经常批评这、批评那的形象。尽管“薯头先生”很…

    2022年7月11日
    17
  • Python 爬虫和数据分析实战

    Python 爬虫和数据分析实战课程介绍本课程是Python爬虫和数据分析项目实战课程,主要分3部分:第1部分是Python爬虫,主要使用Urllib3和BeautifulSoup抓取天猫商城和京东商城胸罩销售数据,并保存到SQLite数据库中;第2部分是对抓取的胸罩销售数据进行数据清洗,主要是去除空数据,让数据格式更规范;第3半部分利用Pandas对数据进行分析,以及使用M…

    2022年5月29日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号