0
包,在我宣佈我的數據類型我怎麼能填充和使用Java
create or replace package pkg_var is
type array_table is table of varchar2(50);
type array_int is table of number;
type p_arr_rec is record(p_no number,p_val varchar2(50));
type array_record is table of p_arr_rec;
end pkg_var;
/
我的過程來填充記錄檢索記錄的表
create or replace procedure proc1(p_array in pkg_var.array_table,
arr_int in pkg_var.array_int,len out number,arr_rec out
pkg_var.array_record)
as
v_count number;
begin
len := p_array.count;
v_count :=0;
for i in 1..p_array.count
loop
--dbms_output.put_line(p_array(i));
arr_rec(i).p_no := arr_int(i);
arr_rec(i).p_val := p_array(i);
v_count := v_count+1;
end loop;
end;
/
這是我class
調用以上程序將數組填入記錄表中
public class TestDatabase {
public static void passArray()
{
try{
dbcon conn = new dbcon();
Connection con = conn.dbstate().getConnection();
String str_array[] = {"one", "two", "three","four"};
int int_array[] = {1, 2, 4,8};
ArrayDescriptor str_des = ArrayDescriptor.createDescriptor("SCOTT.PKG_VAR.ARRAY_TABLE", con);
ARRAY arr_str = new ARRAY(str_des,con,str_array);
ArrayDescriptor des = ArrayDescriptor.createDescriptor("SCOTT.PKG_VAR.ARRAY_INT", con);
ARRAY arr_int = new ARRAY(des,con,int_array);
CallableStatement st = con.prepareCall("call SCOTT.proc1(?,?,?)");
// Passing an array to the procedure -
st.setArray(1, arr_str);
st.setArray(2, arr_int);
st.registerOutParameter(3, Types.INTEGER);
st.registerOutParameter(4,OracleTypes.ARRAY,"SCOTT.PKG_VAR.ARRAY_RECORD");
st.execute();
System.out.println("size : "+st.getInt(3));
// Retrieving array from the resultset of the procedure after execution -
ARRAY arr = ((OracleCallableStatement)st).getARRAY(4);
BigDecimal[] recievedArray = (BigDecimal[])(arr.getArray());
for(int i=0;i<recievedArray.length;i++)
System.out.println("element" + i + ":" + recievedArray[i] + "\n");
} catch(Exception e) {
System.out.println(e);
}
}
public static void main(String args[]){
passArray();
}
}
我得到java.sql.SQLException: invalid name pattern: SCOTT.PKG_VAR.ARRAY_TABLE
異常,任何人都可以幫助我解決這個異常。
還有一個問題,我該如何檢索中SQL
的記錄表格?我的第二個問題是這個代碼 ARRAY arr = ((OracleCallableStatement)st).getARRAY(4);
這是一個有效的代碼table of record
?
在上面的鏈接,我找不到檢索表 – Ravi
的記錄我沒有一個拉回記錄數組的完整示例。我展示瞭如何檢索一個簡單的數組http://betteratoracle.com/posts/26-passing-arrays-between-java-and-oracle-procedures以及如何檢索一個非數組記錄 - http:// betteratoracle。 com/posts/31-passing-record-types-between-oracle-and-java如果你把它和上面的其他鏈接放在一起,你應該可以解決它。基本上,您從Oracle檢索記錄數組,然後將其轉換回Java數組(然後是Oracle結構數組),然後將每個結構轉換回Java數組。 –