PPAS上以自定义类型数组为入参的函数及调用加java调用

本文详细介绍如何在Oracle数据库中创建表、序列及类型,并通过存储过程批量插入数据的方法。文章还提供了使用Java调用存储过程的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--1
--创建表
CREATE TABLE TABLE_TEST
(
 ID NUMBER(10,0) NOT NULL,
 NAME VARCHAR2 NOT NULL,
 ATTRIBUTE1 VARCHAR2,
 ATTRIBUTE2 VARCHAR2,
 CONSTRAINT PK_TABLE_TEST PRIMARY KEY (ID)
);

--2. 创建序列 s_TABLE_TEST.
create sequence s_TABLE_TEST start 1;

--3
--创建类型
create or replace type T_TYPE is object (
 NAME VARCHAR2(100),
 ATTRIBUTE1 VARCHAR2(100),
 ATTRIBUTE2 VARCHAR2(100)
);

--4
--因为不支持组合类型做为出、入参数,改为如下:
create or replace procedure POPULATE_TABLE_TEST (example T_TYPE[]) as
 type t_tb_seq is table of number;
 l_t_seq t_tb_seq := t_tb_seq();
begin
 for i in array_lower(example,1) .. array_upper(example,1) loop
  l_t_seq.extend;
  select s_TABLE_TEST.nextval into l_t_seq(i) from dual;
 end loop;
 
 for i in array_lower(example,1) .. array_upper(example,1) loop
  insert into TABLE_TEST(id,name,attribute1,attribute2)
  values (
   l_t_seq(i),
   example[i].NAME,
   example[i].ATTRIBUTE1,
   example[i].ATTRIBUTE2
  );
 end loop;
end;

--5
--因为不支持结构,创建T_TYPE类并覆盖其toString()方法
class T_Type {
private String name, attribute1, attribute2;
T_Type(String name, String attribute1, String attribute2) {
this.name = name;
this.attribute1 = attribute1;
this.attribute2 = attribute2;
}
@Override
public String toString() {
return "(\"" + name +"\","
+ " \"" + attribute1 + "\","
+ " \"" + attribute2 + "\")";
}
}

--6
--调用存储过程
T_Type[] values = new T_Type[]{new T_Type("obj1_name","obj1_att1", "obj1_att2"),
new T_Type("obj2_name","obj2_att1", "obj2_att2"),
new T_Type("obj3_name","obj3_att1", "obj3_att2")};

CallableStatement cstmt = con.prepareCall("{call POPULATE_TABLE_TEST(?)}");
Array array = con.createArrayOf("t_type", values);
cstmt.setArray(1, array);
cstmt.execute();

--注意
--为了使用方法con.createArrayOf,应该使用JDK1.6+和edb-jdbc16.jar,因为createArrayOf是JDBC4的功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值