PPAS上以自定义类型数组为入参的函数及调用加java调用
2012-12-12 17:35
435 查看
--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的功能。
--创建表
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的功能。
相关文章推荐
- PPAS上以自定义类型数组为入参的函数及调用
- java调用oracle存储过程的自定义类型(可变数组)。
- java调用oracle中输入参数是数组类型的函数或者存储过程
- java调用oracle存储过程的自定义类型(可变数组)。
- Java调用存储过程(返回:简单类型、自定义对象、列表数组)
- java调用oracle存储过程的自定义类型(可变数组).txt
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- java 冒泡排序 函数调用(数组传递)
- JAVA调用DOTNET写的返回为DataSet类型的WebService函数出错 [cvc-complex-type.4:Attribte 'part' must appear on element 'mime:content'.]
- Java后台调用Flex自定义类型 (Java和AS类型转换问题)
- 数组类型——typedef定义的数组类型的函数调用
- C语言-自定义函数,及其调用;函数返回值类型的自动转换,即其数量;
- java如何在函数中调用主函数的数组
- 学习JAVA第五天!数据的基本类型,数组和函数。
- java如何在函数中调用主函数的数组
- VB调用DLL时传递自定义类型数组参数注意
- xFire实现Java间自定义类型的WebService调用(二)
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- java 调用dll的 指针类型结构体及指针数组类型
- dll回调给java的函数参数需要有字节数组类型参数的处理