浪跡天涯
          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 閱讀(5182) 評論(0)  編輯  收藏 所屬分類: 數據庫日記java文件操作
          主站蜘蛛池模板: 且末县| 三台县| 闽侯县| 梧州市| 安乡县| 宣汉县| 阿勒泰市| 安庆市| 舟山市| 任丘市| 佳木斯市| 平遥县| 汶川县| 祁门县| 永昌县| 福安市| 德惠市| 五指山市| 崇仁县| 微博| 璧山县| 东丰县| 崇文区| 乳山市| 湾仔区| 沭阳县| 云安县| 图木舒克市| 申扎县| 合作市| 寿阳县| 唐山市| 阜新市| 乾安县| 忻州市| 朔州市| 镇坪县| 晋宁县| 德庆县| 湖南省| 岳西县|