描述:从java传来一个数据集,在plsql中怎样接收,怎样处理。
解决:需要在oracl中定义表类型或数组类型的实体,在java中调用并构造,在plsql中处理,例:
1、构造数据库对象
--定义一个实体类型
CREATE OR REPLACE TYPE UPLOAD_ENTITY AS OBJECT
(
属性1 varchar2(100),
属性2 varchar2(200),
属性3 varchar2(100)
);
--定义一个实体表类型
CREATE OR REPLACE TYPE UPLOAD_ENTITY_TAB is table of UPLOAD_ENTITY;
2、java调用
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
public class Test{
public static void mian(string[] args){
try{
StructDescriptor sd = new StructDescriptor("UPLOAD_ENTITY",conn); --引用数据库对象
ArrayDescriptor ad = new ArrayDescriptor("UPLOAD_ENTITY_TAB",conn); --引用数据库对象列表
STRUCT[] results = new STRUCT[10];
for (int i = 0; i < 10; i++) {
Object[] obj = new Object[] {
o.属性1()!=null?o.属性1():"",
o.属性2()!=null?o.属性2():"",
o.属性3()!=null?o.属性3():""
};
results[i] = new STRUCT(sd, conn, obj);
}
ARRAY array = new ARRAY(ad, conn, results);
stmt.setArray(1, array);
stmt.registerOutParameter(2, OracleTypes.VARCHAR);
stmt.registerOutParameter(3, OracleTypes.VARCHAR);
stmt.execute();
errCode = stmt.getString(2);
errMsgs.append(stmt.getString(3));
}catch(Exception e){
errCode = "F";
e.printStackTrace();
}
}
}
3、PLSQL中使用
procedure import_all_Entitys(v_in_list in UPLOAD_ENTITY,--传进实体表类型
p_ret_flag out varchar2,
p_err_msg out varchar2) is
entity UPLOAD_ENTITY; --定义实体
begin
--如果使用
for i in 1 .. v_in_list.count loop
entity := v_in_list(i);
dbms_output.put_line(entity.属性1 ||':'||entity.属性2);
end loop;
end;