oracle存儲過程數組
『壹』 oracle中存儲過程怎麼定義一個數組
在PL/sql中是沒有數組(Array)概念的。但是如果程序員想用Array的話,就得變通一下,用TYPE 和Table of Record來代替多維數組
『貳』 oracle測試存儲過程傳入數組怎麼傳
這個是我自己寫的一個例子,你看看:
在命令窗口執行以下語句,創建自定義類型NESTEDARRAY。
create or replace TYPE NESTEDARRAY IS TABLE OF NUMBER;
 
在存儲過程中使用自定義類型NESTEDARRAY。
PROCEDURE GET_ARR_RESULT(INPUTARRAY IN NESTEDARRAY, AR OUT NESTEDARRAY) IS
  BEGIN
    AR := NESTEDARRAY();
  
    FOR I IN 1 .. INPUTARRAY.COUNT LOOP
      AR.EXTEND;
      AR(I) := I|| INPUTARRAY(I);
    END LOOP;
 END GET_ARR_RESULT;
 
java代碼:
import java.sql.Connection;
import java.sql.SQLException;
 
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;
 
/**
 * Java獲取Oracle存儲過程返回自定義類型
 * @author lucky star
 *
 */
public class OracleTypeResultTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
       Connection con = null;
       OracleCallableStatement ocs = null;
       String sql = "{call test.GET_ARR_RESULT(?,?)}";
    
       try {
           con = DBUtil.dbUtil.getConnection();
           ocs = (OracleCallableStatement) con.prepareCall(sql);
           String[] params = {「10001」,」10003」};
           ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("NESTEDARRAY", con);
           ARRAY inputArray = new ARRAY(arrayDesc, con, params);
           ocs.setARRAY(1, inputArray);
           ocs.registerOutParameter(2,OracleTypes.ARRAY,"NESTEDARRAY");
           ocs.execute();
              
           ARRAY array = ocs.getARRAY(2);
           Datum[] datum = array.getOracleArray();
           for (int i=0;i<datum.length;i++) {
              System.out.println(datum[i].intValue());
           }
           
       } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } finally {
           try {
              if(ocs!=null)ocs.close();
              if(con!=null)con.close();
           } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
           }
       }
    }
 
}
 
用VARCHAR2測試,發現存儲過程中無法獲取到傳入的數組的值。
不過,將自定義類型由varchar2改成NVarchar2就成功了。
『叄』 oracle 存儲過程,如何傳入一個數組
這個是不行的,數組內容必須首先在存儲過程里定義好數組類型,然後給予定義好的數據類型定義數組型變數。存儲過程的入參是做不到的。一般情況下,採用字元串的方式,並給每項用特定的分隔符的方式傳入,然後在存儲過程中按照分隔符解析出每一項,插到存儲過程的定義的數組的每一項上去。
『肆』 oracle 存儲過程 數組循環
declare
    type typ_rec is record of (student.name%type, student.age%type); --集合變數
    type typ_tab is table of typ_rec index by binary_integer;  --以集合變數為單位的table數組
    rec_sql typ_rec;  
    another_rec student%rowtype;  --跟rec_sql一樣
begin
    --for循環里的rec_tmp不用定義,可以自動生成的
    for rec_tmp in (select t.name, t.age from student t) loop
       dbms_output.putline(rec_tmp.name || ' ''s age + 1 = ' || to_char(rec_tmp.age + 1) );
    end loop;
exception
  when others then
      return;
end;
『伍』 oracle存儲過程怎麼將變數扔進數組
先自定義集合類型變數類型,然後定義對應的變數,直接把集合類型穿給存儲過程就可以了,不用在存儲過程中搞,應用程序中搞好傳過去就可以了,我都是這樣搞的
『陸』 Oracle 存儲過程 數組做參數 求實例
packtest.test(v_string,v_int);
你的v_string輸入參數沒有初始化。
v_string system.packtest.string_array := system.packtest.string_array('a','b','c');
『柒』 oracle中的存儲過程可以用數組嗎
首先你需要定義一個數組類型,然後定義這個數組變數declaretypea_typeistableofnumber;--typea_typeisarray(10)ofnumber;--下面一種定義方式則指定了該數組的最大元素個數aa_type:=a_type();--定義並初始化一個數組變數begina.extend(3);--數組擴展到3個元素a(1):=1;a(2):=10;a(3):=100;end;另外數組還有一下方法和屬性first--第一個元素下標last--最後一個元素下標count--數組元素個數prior(n)--下標n的前一個元素下標next(n)--下標n後一個元素下標extend(n)--添加n個數組元素,不帶參數添加一個數組元素delete(n)--刪除數組中下標為n的元素,不帶參數刪除整個數組元素
『捌』 oracle 存儲過程中如何使用數組,請給一個能調試成功的例子
oracle這么強大的資料庫能使用數組的
在oracle中,數組主要是用來存儲批量數據,一次性的對資料庫進行插入,更新,刪除操作。
下面給你一個批量插入的例子,其他都類似的
這是我的blog上面有例子,你自己看看吧。
http://zhuwei511.blog.sohu.com/
『玖』 oracle存儲過程中如何使用數組
首先你需要定義一個數組類型,然後定義這個數組變數
declare
type a_type is table of number;
-- type a_type is array(10) of number; 
-- 下面一種定義方式則指定了該數組的最大元素個數
a a_type := a_type(); -- 定義並初始化一個數組變數
begin
a.extend(3); -- 數組擴展到3個元素
a(1) := 1;
a(2) := 10;
a(3) := 100;
end;
另外數組還有一下方法和屬性
first  -- 第一個元素下標
last -- 最後一個元素下標
count -- 數組元素個數
prior(n) -- 下標 n 的前一個元素下標
next(n) -- 下標 n 後一個元素下標
extend(n) -- 添加 n 個數組元素,不帶參數添加一個數組元素
delete(n) -- 刪除數組中下標為 n 的元素,不帶參數刪除整個數組元素
『拾』 怎樣在oracle存儲過程中定義數組
首先你需要定義一個數組類型,然後定義這個數組變數
declare
  type a_type is table of number;
-- type a_type is array(10) of number; 
-- 下面一種定義方式則指定了該數組的最大元素個數
  a a_type := a_type(); -- 定義並初始化一個數組變數
begin
  a.extend(3); -- 數組擴展到3個元素
a(1) := 1;
  a(2) := 10;
  a(3) := 100;
end;
另外數組還有一下方法和屬性
first  -- 第一個元素下標
last -- 最後一個元素下標
count -- 數組元素個數
prior(n) -- 下標 n 的前一個元素下標
next(n) -- 下標 n 後一個元素下標
extend(n) -- 添加 n 個數組元素,不帶參數添加一個數組元素
delete(n) -- 刪除數組中下標為 n 的元素,不帶參數刪除整個數組元素
