本站不再更新,歡迎光臨 java開發技術網
          隨筆-230  評論-230  文章-8  trackbacks-0

          oracle 存儲過程返回數組的方法:
          1.建立包
          create or replace package test is
          TYPE filename_array IS TABLE OF varchar2(1);
          ?filename filename_array;
          end test;
          2. 建立存儲過程
          create or replace procedure test_array(v_cfjg out test.filename_array ) is
          begin DECLARE i number;
          D_cfjg dic_cfjg%rowTYPE;
          -- D_nr dic_cfjg%rowTYPE;
          cursor c1 is SELECT * FROM dic_cfjg;
          BEGIN
          i:=0;
          v_cfjg := test.filename_array(); --數組初始化

          open c1;
          LOOP fetch c1 into D_cfjg;
          EXIT WHEN c1%NOTFOUND ;
          i:=i+1;
          v_cfjg.EXTEND;
          -- DBMS_OUTPUT.PUT_LINE(TO_CHAR(D_cfjg.dm));
          v_cfjg(v_cfjg.count):=D_cfjg.dm;
          DBMS_OUTPUT.PUT_LINE(v_cfjg(v_cfjg.count));
          -- 測試
          -- FETCH C1 INTO D_cfjg;
          -- EXIT WHEN c1%NOTFOUND ;
          END LOOP;
          end;
          EXCEPTION
          WHEN TOO_MANY_ROWS THEN
          DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
          WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(sqlerrm);
          end test_array;

          ===========================

          Java 調用PL/SQL Returning Object Array

          上次寫了oracle 存儲過程返回數組的方法。這次實現在java調用返回值是數組的存儲過程方法。

          1. 數組:CYJ_ARRAY

          CREATE OR REPLACE TYPE CYJ_ARRAY is VARRAY(20) OF integer

          2. 存儲過程:getTestArray()

          CREATE OR REPLACE FUNCTION getTestArray RETURN CYJ_ARRAY
          AS
          ? l_test CYJ_ARRAY :=CYJ_ARRAY();

          ?? begin
          ??? FOR i IN 1..10 LOOP
          ????? l_test.extend;
          ????? l_test(l_test.count) := i;
          ????? dbms_output.put_line(l_test(l_test.count));
          ??? END LOOP;
          ??? RETURN? l_test;
          ? END;
          3. 調用存儲過程的java 類

          public class TestOracleReturnArray? {
          ?

          public static void main(String[] args) throws SQLException {
          ?Connection conn = null;
          ?CallableStatement cstmt = null;
          ?ResultSet rs = null;
          ?try {
          ??
          ??DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
          ??conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora","zzz","sss");
          ??
          ??conn.setAutoCommit(false);
          ??String procedure = "{? = call getTestArray() }";// 調用存儲過程
          ??cstmt = conn.prepareCall(procedure);
          ??cstmt.registerOutParameter(1, OracleTypes.ARRAY,"CYJ_ARRAY"); //注:type name:區分大小,不是包中的type, 使用包中定義的type如何調用還不知道
          ??
          ??cstmt.execute();
          ??ARRAY array = (ARRAY)cstmt.getObject(1);
          ??Object[] items = (Object[])array.getArray();
          ??Object obj;
          ??
          ??for (int i = 0; i < items.length; i++) {
          ??? obj = items[i];
          ???
          ???System.out.println(obj);
          ???
          ???} // for
          ?} catch (Exception e) {
          ??e.printStackTrace();
          ?} finally {
          ??//DbConnRestore.connRestore(rs, cstmt, null, conn);
          ?}
          }

          }

          參考如下資料:

          http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/varray/index.html

          posted on 2006-11-03 11:24 有貓相伴的日子 閱讀(2013) 評論(0)  編輯  收藏 所屬分類: pl/sql
          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 富川| 隆尧县| 城固县| 襄汾县| 滨州市| 集安市| 伊宁县| 麻栗坡县| 宝丰县| 日喀则市| 五原县| 靖安县| 江永县| 谷城县| 濮阳市| 泸溪县| 平顶山市| 临沂市| 自治县| 綦江县| 德阳市| 利津县| 苏尼特左旗| 益阳市| 常山县| 时尚| 天柱县| 七台河市| 军事| 霞浦县| 宝鸡市| 普陀区| 衡山县| 南投市| 广饶县| 北流市| 永昌县| 伊宁县| 周至县| 秦皇岛市| 连云港市|