查詢3d信息(組3、組6、機球號)---存儲過程的使用方法---

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;
 }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章