`

JAVA调用存储过程(嵌套表)自定义类型例子

阅读更多

1. 建立type

   CREATE OR REPLACE TYPE TEAMVO AS OBJECT (
                  team_name  varchar2(100),
                  team_race_name varchar2(100),
                  team_showing number(4),
                  team_race_season_name  varchar2(100),
                  team_type  varchar2(10),
                  team_scores number(4),
                  win_showing number(3),
                  equal_showing number(3),
                  lose_showing  number(3),
                  win_rate      varchar2(10),          
                  equal_rate    varchar2(10),
                  lose_rate     varchar2(10),
                  in_goals     number(4),
                  lose_goals   number(4),
                  in_goals_avg  varchar2(10),
                  lose_goals_avg varchar2(10),
                  goal_difference   number(3)
 )

 

CREATE OR REPLACE TYPE TEAMVOS is table of TEAMVO

 

2. 建立存储过程

   

    create or replace package body team is
       procedure team_manager(
                    p_ConditionSelect varchar2, --条件查询语句
                    p_Out            out TEAMVOS)
    is
  type refCursorType IS REF CURSOR;
  type teams is table of string(100) index by pls_integer; 
      v_sql  varchar2(1000);
      against_c refCursorType;
      t_race_name varchar2(100);           --联赛名称
      t_race_season_name varchar2(100);    --赛季名
      t_host_name varchar2(100);
      t_guest_name varchar2(100);
      t_team_type  char(1);
      t_score     varchar2(20);
      t_race_result varchar2(10);
      t_host_goal number(4):=0;
      t_guest_goal number(4):=0;
      contains_flag1       int := -1;
      contains_flag2       int := -1;
      against_teams      teams;
      team_vo        TEAMVO;        
  
begin
   
    team_vo := TEAMVO('','',0,'','',0,0,0,0,'','','',0,0,'','',0);
    p_Out := TEAMVOS();
   
    v_sql := 'select t.race_name,t.race_season_name,t.host_name,t.guest_name,t.type,t.score,t.race_result,
                  to_number(substr(t.score,0,instr(t.score,'':'')-1)) as host_goal,
                  (case when instr(t.score,''*'') = 0 then to_number(substr(t.score,instr(t.score,'':'')+1,length(t.score)))
                        else  to_number(substr(t.score,instr(t.score,'':'')+1,instr(t.score,''*'')-instr(t.score,'':'')-1))   end ) as  guest_goal                                                   
                     from t_against t  where t.status = 2 '|| p_ConditionSelect ;
 
    open against_c for v_sql;
    loop
   
        fetch against_c into t_race_name,t_race_season_name,t_host_name,t_guest_name,t_team_type,t_score,t_race_result,t_host_goal,t_guest_goal;
              EXIT WHEN against_c%NOTFOUND;
         
         
           for x in 0..against_teams.count-1 loop
              --已包含球队
              if against_teams(x) = t_host_name then
                  contains_flag1 := 1;
              elsif against_teams(x) = t_guest_name then
                  contains_flag2 := 1;
              end if;
           end loop;
          
          
           -- 增加主队
           if  contains_flag1 = -1 then
               against_teams(against_teams.count) := t_host_name;
               p_Out.extend;
               p_Out(against_teams.count) := team_vo;
               p_Out(against_teams.count).team_name := t_host_name;
               if t_team_type ='1' then  p_Out(against_teams.count).team_type := '联赛队';
                  elsif t_team_type ='2' then  p_Out(against_teams.count).team_type := '国家队';
                  else p_Out(against_teams.count).team_type := '其他队';
               end if;
               p_Out(against_teams.count).team_race_name  := t_race_name;
               p_Out(against_teams.count).team_race_season_name := t_race_season_name;
              
           end if;
          
           --增加客队
           if contains_flag2 = -1 then
               against_teams(against_teams.count) := t_guest_name;
               p_Out.extend;
               p_Out(against_teams.count) := team_vo;
               p_Out(against_teams.count).team_name := t_guest_name;
               if t_team_type ='1' then  p_Out(against_teams.count).team_type := '联赛队';
                  elsif t_team_type ='2' then  p_Out(against_teams.count).team_type := '国家队';
                  else p_Out(against_teams.count).team_type := '其他队';
               end if;
               p_Out(against_teams.count).team_race_name  := t_race_name;
               p_Out(against_teams.count).team_race_season_name := t_race_season_name;
           end if; 
          
           /*
           DBMS_OUTPUT.PUT_LINE('-------------------------------');
            for i in 1..against_teams.count loop
                 DBMS_OUTPUT.PUT_LINE(p_Out(i).team_name);
             end loop;
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            DBMS_OUTPUT.PUT_LINE('主队:'|| t_host_name ||'客队:'||t_guest_name);
           */
           for i in 1..against_teams.count loop
               --主场
              if p_Out(i).team_name = t_host_name then
                  p_Out(i).team_showing := p_Out(i).team_showing +1;
                  if t_race_result = '3' then 
                     p_Out(i).win_showing := p_Out(i).win_showing +1;
                  elsif t_race_result = '1' then 
                     p_Out(i).equal_showing := p_Out(i).equal_showing +1;
                  else 
                     p_Out(i).lose_showing := p_Out(i).lose_showing +1;
                  end if;
                  p_Out(i).team_scores :=  p_Out(i).team_scores + t_race_result;
                  p_Out(i).in_goals := p_Out(i).in_goals + t_host_goal;
                  p_Out(i).lose_goals := p_Out(i).lose_goals + t_guest_goal;
                 
               --客场
              elsif p_Out(i).team_name = t_guest_name then
                  p_Out(i).team_showing := p_Out(i).team_showing +1;
                  if t_race_result = '3' then 
                     p_Out(i).lose_showing := p_Out(i).lose_showing +1;
                  elsif t_race_result = '1' then 
                     p_Out(i).equal_showing := p_Out(i).equal_showing +1;
                     p_Out(i).team_scores :=  p_Out(i).team_scores + 1;
                  else
                     p_Out(i).win_showing := p_Out(i).win_showing +1;
                     p_Out(i).team_scores :=  p_Out(i).team_scores + 3;
                  end if;
                  p_Out(i).in_goals := p_Out(i).in_goals + t_guest_goal;
                  p_Out(i).lose_goals := p_Out(i).lose_goals + t_host_goal;
             end if;
           end loop;
          
          contains_flag1 := -1;
          contains_flag2 := -1;
         
     end loop;    
       
        for i in 1..against_teams.count loop
          if p_Out(i).team_showing != 0 then
            p_Out(i).win_rate := to_char( floor(p_Out(i).win_showing *10000/ p_Out(i).team_showing+0.5)/100)||'%';
            p_Out(i).equal_rate := to_char( floor(p_Out(i).equal_showing *10000/ p_Out(i).team_showing+0.5)/100)||'%';
            p_Out(i).lose_rate := to_char( floor(p_Out(i).lose_showing *10000/ p_Out(i).team_showing+0.5)/100)||'%';
            p_Out(i).in_goals_avg := to_char( floor(p_Out(i).in_goals *100/ p_Out(i).team_showing+0.5)/100);
            p_Out(i).lose_goals_avg := to_char( floor(p_Out(i).lose_goals *100/ p_Out(i).team_showing+0.5)/100);
          end if;
          p_Out(i).goal_difference := p_Out(i).in_goals - p_Out(i).lose_goals;
        end loop;
       
        DBMS_OUTPUT.PUT_LINE('球队名称'||'--' ||'场次' ||'--' ||'球队类型'
        ||'--' ||'总进球数'||'--'||'总失球数'||'--'||'胜'||'--'||'平'
        ||'--'||'负' ||'--'||'平均得球'||'--'||'平均失球'||'--'||'总积分'
        ||'--'||'净胜球'  );
       for x in 1..against_teams.count loop
           DBMS_OUTPUT.PUT_LINE(p_Out(x).team_name||'--' ||
           p_Out(x).team_showing ||'--' ||
           p_Out(x).team_type  ||'--' ||
           p_Out(x).in_goals    ||'--' ||
           p_Out(x).lose_goals  ||'--' ||
           p_Out(x).win_rate ||'--' ||
           p_Out(x).equal_rate  ||'--' ||
           p_Out(x).lose_rate  ||'--' ||
            
           p_Out(x).in_goals_avg ||'--' ||
           p_Out(x).lose_goals_avg ||'--' ||
           p_Out(x).team_scores ||'  ' ||
           p_Out(x).goal_difference ||'  ' ||
           p_Out(x).team_scores
           );  
           --DBMS_OUTPUT.PUT_LINE(1);
       end loop; 
      
    CLOSE against_c;
 end team_manager;
end team;    

 

 

3.JAVA调用

 

   public List<TeamVo> findAllTeamManager(String conditionSelect){
  Connection conn = null;
  CallableStatement stmt = null;
  List<TeamVo> teamList = null;
  TeamVo teamVo = null;
  Object[] objs = null;
  String sql = "{ call team.team_manager(?,?)}";
  try {
   conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
   stmt = conn.prepareCall(sql.replace("%", "'").replace("'", ""));
   stmt.setString(1, conditionSelect);
   stmt.registerOutParameter(2,OracleTypes.ARRAY,"LOTTERY.TEAMVOS");
   stmt.execute();
   Object[] obj = (Object[])stmt.getArray(2).getArray();
   if(obj != null){
    teamList = new ArrayList<TeamVo>();
    for(Object o : obj){
     objs = ((STRUCT)o).getAttributes();
     teamVo = new TeamVo();
     teamVo.setHostName((String)objs[0]);
     teamVo.setReceName((String)objs[1]);
     teamVo.setShowing((BigDecimal)objs[2]);
     teamVo.setRaceSeasonName((String)objs[3]);
     teamVo.setTeamType((String)objs[4]);
     teamVo.setTeamScores((BigDecimal)objs[5]);
     teamVo.setWinShowing((BigDecimal)objs[6]);
     teamVo.setEqualShowing((BigDecimal)objs[7]);
     teamVo.setLostShowing((BigDecimal)objs[8]);
     teamVo.setWinShowingRate((String)objs[9]);
     teamVo.setEqualShowingRate((String)objs[10]);
     teamVo.setLostShowingRate((String)objs[11]);
     teamVo.setInGoals((BigDecimal)objs[12]);
     teamVo.setLostGoals((BigDecimal)objs[13]);
     teamVo.setInGoals_avg((String)objs[14]);
     teamVo.setLostGoals_avg((String)objs[15]);
     teamVo.setTeam_gd((BigDecimal)objs[16]);
     teamList.add(teamVo);
    }
    Collections.sort(teamList,Collections.reverseOrder());
    for(int i = 0;i<teamList.size();i++){
     teamList.get(i).setRanking(i+1);
    }
   }
   
  } catch (SQLException e) {
   conn = null;
   stmt = null;
   teamList = null;
   e.printStackTrace();
   return null;
  } finally{
   conn = null;
   stmt = null;
  }
  return teamList;
 }

 

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java源码包3

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java源码包2

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    Java 异常艺术:自定义异常的魔力-解锁编程的新维度.pdf

    在这个例子中,`WeakPasswordException` 类不仅包含了基本的错误消息,还额外存储了用户名信息,这样在异常被抛出时,可以提供更多关于错误来源的信息,有助于后续的调试和错误处理。 ```java public class ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    JAVA上百实例源码以及开源项目源代码

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    java源码包4

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    疯狂JAVA讲义

    学生提问:为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过? 150 5.7 多态 151 5.7.1 多态性 151 5.7.2 引用变量的强制类型转换 152 5.7.3 instanceof运算符 154 5.8 继承与组合 154 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    书名:《Java开发实战1200例(第I卷)》(清华大学出版社.李钟尉,陈丹丹) PDF格式扫描版,全书分为24章,共817页。2011年1月出版。 全书压缩打包成4部分,这是第3部分 注:本系列图书的第I、II卷再版时均相应改名为...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java范例开发大全

    第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

    Java范例开发大全 (源程序)

     第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5 算术运算符 12  实例6 关系...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    java范例开发大全(pdf&源码)

    第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

Global site tag (gtag.js) - Google Analytics