浪跡天涯
          web報表設計器....
          posts - 61,comments - 71,trackbacks - 0
          定義兩個包(package)
          CREATE?OR?REPLACE?PACKAGE?pro_package_test_001?AS
          TYPE?Test_CURSOR01?
          IS?REF?CURSOR;
          end?pro_package_test_001;
          CREATE?OR?REPLACE?PACKAGE?pro_package_test_002?AS
          TYPE?Test_CURSOR02?
          IS?REF?CURSOR;
          end?pro_package_test_002;
          定義存儲過程
          CREATE?OR?REPLACE?PROCEDURE?pro_query_001
          (
          --參數IN表示輸入參數,OUT表示輸入參數,類型可以使用任意Oracle中的合法類型。
          ?in_lx??IN?Varchar2,
          ?p_cus_01?OUT?pro_package_test_001.Test_CURSOR01,
          ?p_cus_02?OUT?pro_package_test_002.Test_CURSOR02?????
          )
          AS
          --定義變量
          ?vs_lx???VARCHAR2(1);???--變量
          ?vs_test1_id???VARCHAR2(100);???--變量
          ?vs_test1_mc???VARCHAR2(100);???--變量
          ?vs_test2_id???VARCHAR2(100);???--變量
          ?vs_test2_mc???VARCHAR2(100);???--變量
          ?--default_c?SYS_REFCURSOR;????
          BEGIN
          ?
          --用輸入參數給變量賦初值。
          ?vs_lx:=?in_lx;
          ?
          --插入test1表。
          ?OPEN?p_cus_01?FOR??Select
          ????a.id?
          As?id1,
          ????a.mc?
          As?mc1,
          ????b.id?
          As?id2,
          ????b.mc?
          As?mc2?
          ????
          Into
          ????vs_test1_id,
          ????vs_test1_mc,
          ????vs_test2_id,
          ????vs_test2_mc?
          ????
          From?test1?a,test2?b?Where?a.id?=?b.id?And?a.lx?=?vs_lx;
          ???
          ????
          --if?p_cus_01%rowcount?=?0?then?
          ???--????p_cus_01:=default_c;?
          ???--?end?if;?
          ??
          ?
          OPEN?p_cus_02?FOR??Select
          ????id?
          As?id1,
          ????mc?
          As?mc1
          ????
          Into
          ????vs_test1_id,
          ????vs_test1_mc
          ????
          From?test2??Where?lx?=?vs_lx;??
          ???
          --?if?p_cus_02%rowcount?=?0?then?
          ????--???p_cus_02:=default_c;?
          ??--??end?if;???????
          ?--錯誤處理部分。OTHERS表示除了聲明外的任意錯誤。SQLERRM是系統內置變量保存了當前錯誤的詳細信息。
          Exception
          ???
          WHEN?OTHERS?Then
          ???
          ROLLBACK;
          ???
          Return;
          End?pro_query_001;
          java 代碼調用
          ?????public?void?ProcQuery(String?procString,String?[]?params)?throws?Exception?{?
          ?????????Session?session?
          =?null;
          ?????????Connection?conn?
          =?null;
          ?????????ResultSet?rs1?
          =?null;
          ?????????ResultSet?rs2?
          =?null;
          ???????????CallableStatement?proc?
          =?null;
          ???????????procString?
          =?"{call?pro_query_001(?,?,?)}";
          ???????????params?
          =?new?String?[1];
          ??????????params[
          0]="0";
          ?????????
          try?{????
          ??????????????session?
          =?getHibernateTemplate().getSessionFactory()
          ????????????.openSession();
          ??????????????conn?
          =?session.connection();?
          ?????????????proc?
          =?conn.prepareCall(procString);?
          ?????????????proc.setString(
          1,?params[0]);?????//傳入的參數
          ?????????????proc.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
          ?????????????proc.registerOutParameter(
          3,oracle.jdbc.OracleTypes.CURSOR);?
          ?????????????proc.execute();?
          ?????????????rs1?
          =?(ResultSet)proc.getObject(2);//返回第一個游標
          ?????????????rs2?=?(ResultSet)proc.getObject(3);//返回第二個游標
          ????????????while(rs1?!=?null?&&?rs1.next())?{
          ??????????????????System.out.println(
          ">>>"+rs1.getString("id1"));
          ??????????????????System.out.println(
          ">>>"+rs1.getString("mc1"));
          ??????????????????System.out.println(
          ">>>"+rs1.getString("id2"));
          ??????????????????System.out.println(
          ">>>"+rs1.getString("mc2"));
          ????????????}

          ????????????
          while(rs2?!=?null?&&?rs2.next())?{
          ????????????????System.out.println(
          ">>>"+rs1.getString("id1"));
          ????????????????System.out.println(
          ">>>"+rs1.getString("mc1"));
          ??????????}
          ????????????
          ?????????}
          ?catch?(SQLException?e)?{???
          ?????????????e.printStackTrace();???
          ?????????????
          throw?new?Exception("調用存儲過程的時候發生錯誤[sql?=?"?+?procString?+?"]",?e);?????????
          ?????????}
          ??finally?{
          ?????????????
          if?(proc?!=?null)
          ?????????????????proc.close();
          ?????????????
          if?(rs1?!=?null)
          ?????????????????rs1.close();
          ?????????????
          if?(rs2?!=?null)
          ?????????????????rs2.close();
          ?????????????
          if?(conn?!=?null)
          ?????????????conn.close();
          ?????????}
          ?
          ?????}
          posted on 2010-01-20 09:52 JJCEA 閱讀(5189) 評論(0)  編輯  收藏 所屬分類: 數據庫日記 、java文件操作
          主站蜘蛛池模板: 黔东| 茶陵县| 陆良县| 顺义区| 洛南县| 东莞市| 故城县| 和平县| 安西县| 邹城市| 航空| 清徐县| 安国市| 绥中县| 庄河市| 来宾市| 潮州市| 广州市| 安宁市| 伊宁市| 乌鲁木齐市| 方城县| 盐城市| 循化| 台安县| 沧州市| 韩城市| 山丹县| 德令哈市| 澄迈县| 神池县| 团风县| 永和县| 叙永县| 磐石市| 竹溪县| 顺平县| 池州市| 柘城县| 区。| 神木县|