1、存儲過程代碼:pr_get_3dinfo------------------
create or replace procedure pr_get_3dinfo(
iz3 in integer, --------組三 爲選默認0
iz6 in integer, --------組六
ijq in integer, --------機球好
izjq in integer, -----最近期數
iyear in varchar2, --------年份
ocursor out pk_public.zhcw_cursor -------------遊標集
)
is ---------在is 和begin 直接用來定義本地的臨時變量
v_where varchar2(1000); --------定義臨時變量(作爲動態的sql串中的條件變量串)
v_sql varchar2(4000); --------定義臨時變量(作爲動態的sql串)
/*
功能:
參數:未選 默認0,
iz3 1表示選中
iz6 1表示選中
ijq 1 1機1球 ,2 1機2球 ,3 2機1球, 4 2機2球
izjq ----最近期數
iyear --------年份
作者:李成
時間:2010-7-17
*/
begin----------------------- (begin) 與(end 存儲過程名稱)之間爲業務處理階段
--- return;
v_where := ' and t.cz_id=2';
if(ijq=1) then
v_where := ' and m.j_num=1 and m.q_num=1'||v_where;
elsif(ijq=2) then
v_where := ' and m.j_num=1 and m.q_num=2'||v_where;
elsif(ijq=3) then
v_where := ' and m.j_num=2 and m.q_num=1'||v_where;
elsif(ijq=4) then
v_where := ' and m.j_num=2 and m.q_num=2'||v_where;
end if;
if(iyear >0) then
v_where := ' and substr(t.kj_date,1,4)='''||iyear||''''||v_where;
end if;
if(iz3>0 and iz6=0) then
v_where := ' and ((substr(t.kj_z_num,1,1)=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,5,1))
or (substr(t.kj_z_num,1,1)=substr(t.kj_z_num,5,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1))
or (substr(t.kj_z_num,5,1)=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1)))'||v_where;
elsif(iz3=0 and iz6>0) then
v_where := ' and (substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,5,1))'||v_where;
elsif(iz3>0 and iz6>0) then
v_where := ' and ((substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,5,1))
or ((substr(t.kj_z_num,1,1)=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,5,1))
or (substr(t.kj_z_num,1,1)=substr(t.kj_z_num,5,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1))
or (substr(t.kj_z_num,5,1)=substr(t.kj_z_num,3,1) and substr(t.kj_z_num,1,1)!=substr(t.kj_z_num,3,1))))'||v_where;
end if;
if(izjq=0) then
v_sql := '
select t.kj_issue,t.kj_z_num,t.kj_date,m.j_num,m.q_num,m.sj_num from tab_kaijiang_info t
left join tab_cz_zj_info m on t.cz_id=m.cz_id and t.kj_issue=m.kj_issue
where 1=1 ' ||v_where||
' order by t.kj_issue desc';
else
v_sql := ' select t.kj_issue,t.kj_z_num,t.kj_date,m.j_num,m.q_num,m.sj_num from
(select b.* from ( select * from tab_kaijiang_info r where r.cz_id=2 order by r.kj_issue desc) b where rownum<='||izjq||')
t left join tab_cz_zj_info m on t.cz_id=m.cz_id and t.kj_issue=m.kj_issue
where 1=1 ' ||v_where||
' order by t.kj_issue desc' ;
end if;
open ocursor for v_sql; -------打開遊標的連接
end pr_get_3dinfo; -------存儲過程結束標識
二、java 調用存儲過程。
/*
*
* 查詢3d信息,調用存儲過程
*
*/
public List find_3d_infor() throws Exception{
//創建一個連接對象
Connection conn = getSession().connection();
//定義需要返回的List對象
List list = new ArrayList();
//定義阿帕奇提供的一個數據集對象
RowSetDynaClass result = null;
//定義結果集對象
ResultSet rs = null;
//定義數據連接控制對象
CallableStatement proc = null;
proc = conn.prepareCall("{ call pr_get_3dinfo(?,?,?,?,?,?) }");
//設置整形和字符串型的數據
proc.setInt(1, 0);
proc.setInt(2, 0);
proc.setInt(3, 0);
proc.setInt(4, 30);
proc.setString(5, "0");
//定義需要返回的遊標參數
proc.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
//執行數據
proc.execute();
//得到要返回的遊標數據
rs = (ResultSet) proc.getObject(6);
//將結果集轉換成需要的數據集對象
result = new RowSetDynaClass(rs);
//將記過集合對象轉換成list對象
list=result.getRows();
//關閉結果集
rs.close();
//關閉控制器
proc.close();
//關閉連接對象
conn.close();
return list;
}
}