PLSQL处理从java传过来的数组

7 篇文章 0 订阅

描述:从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; 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值