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;
}
发表评论
-
如何启用sqlplus的AutoTrace功能
2010-01-11 23:26 971通过以下方法可以把Autotrace的权限授予Everyone ... -
oracle发送邮件
2010-01-11 23:24 1168CREATE OR REPLACE PACKAGE demo_ ... -
Oracle XE 中的字符集的变换
2010-01-11 22:51 2437转载自:http://www.eygl ... -
oracle常用查询
2010-01-10 09:31 1185oracle常用查询 oracle常用经典sql查询 ... -
toad相关
2010-01-10 09:29 2832toad相关 关键字: toad 9 ... -
oracle 导sequence命令
2010-01-08 17:52 1115select 'create sequence '||sequ ... -
oracle创建表空间和用户授权
2009-12-14 17:13 11102SYS用户在CMD下以DBA身份登陆: 在CMD中打sqlp ... -
关于ORACLE的ora-12505报错以及连接问题的解决及相关资料
2009-11-20 16:06 1714Error occured while trying to c ... -
SQL查询慢的48个原因分析
2009-09-16 16:21 915查询速度慢的原因很多 ...
相关推荐
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
- 子报表是将一个报表嵌套在另一个报表中的功能,常用于详细信息的展示。 - 交叉表(或称透视表)可以将数据以行列的形式展示,方便数据分析。 - 示例将展示如何创建和使用这两种复杂报表元素。 7. **图表和图形...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
在这个例子中,`WeakPasswordException` 类不仅包含了基本的错误消息,还额外存储了用户名信息,这样在异常被抛出时,可以提供更多关于错误来源的信息,有助于后续的调试和错误处理。 ```java public class ...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
学生提问:为什么我创建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例(第I卷)》(清华大学出版社.李钟尉,陈丹丹) PDF格式扫描版,全书分为24章,共817页。2011年1月出版。 全书压缩打包成4部分,这是第3部分 注:本系列图书的第I、II卷再版时均相应改名为...
### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **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配置...
第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...
第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系...
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 配置环境...
第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...