浪跡天涯
          web報表設(shè)計器....
          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
          (
          --參數(shù)IN表示輸入?yún)?shù),OUT表示輸入?yún)?shù),類型可以使用任意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
          ?
          --用輸入?yún)?shù)給變量賦初值。
          ?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是系統(tǒng)內(nèi)置變量保存了當(dāng)前錯誤的詳細(xì)信息。
          Exception
          ???
          WHEN?OTHERS?Then
          ???
          ROLLBACK;
          ???
          Return;
          End?pro_query_001;
          java 代碼調(diào)用
          ?????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]);?????//傳入的參數(shù)
          ?????????????proc.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
          ?????????????proc.registerOutParameter(
          3,oracle.jdbc.OracleTypes.CURSOR);?
          ?????????????proc.execute();?
          ?????????????rs1?
          =?(ResultSet)proc.getObject(2);//返回第一個游標(biāo)
          ?????????????rs2?=?(ResultSet)proc.getObject(3);//返回第二個游標(biāo)
          ????????????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("調(diào)用存儲過程的時候發(fā)生錯誤[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)  編輯  收藏 所屬分類: 數(shù)據(jù)庫日記java文件操作
          主站蜘蛛池模板: 金川县| 突泉县| 民勤县| 收藏| 东乌珠穆沁旗| 普兰县| 徐水县| 名山县| 海晏县| 綦江县| 钦州市| 博白县| 阿尔山市| 博野县| 芷江| 吉安县| 交口县| 项城市| 宽城| 明溪县| 晋中市| 仙居县| 景谷| 松江区| 梁平县| 中西区| 包头市| 太原市| 嘉兴市| 崇州市| 阿合奇县| 九龙城区| 玛沁县| 宁强县| 金塔县| 得荣县| 修武县| 阿荣旗| 台南县| 大悟县| 昆山市|