最近CSDN上有比较多的朋友问到java与oracle存储过程/函数的交互方面的问题。本人也是一步步学起来的,在之前也碰到过类似的问题,经常一头雾水。但现在某些东西似乎是有点入门的味道了,觉得应该写点什么总结一下,方便大众,也是为了自己查找方便。就准备写一个系列。
嗯,因为是原创,可能代码存在一些错误或者不足,还希望大家谅解并指出来。但可以负责任的说一句:本人的以下代码都是测试通过的,可以直接^C^V用。好了,废话不多说,直接来第一篇。
oracle的连接类
这个在后续的所有java代码中都会用到,本来不想写的,但懒得每个类中都这么getConnection一下,所以弄了这个。另外,类所在的package也就不改了,请要用的朋友相应的修改吧,后续的各篇也是如此,这里就不过多罗嗦了。
1varchar2、number数组.sql
--为了保证写出来的都是可以运行的,所以每次创建表、类型等等,都先drop一下。第一次运行的朋友,可能会发现drop语句报×××不存在,可以忽略。引号
drop table T_VarcharArray;
create table T_VarcharArray(
id number(10),
name varchar2(100)
);
drop type T_VARCHAR;
--创建一个与T_VarcharArray的name同类型的不定长数组的引定义
create or replace type T_VARCHAR as table of varchar2(100);
/
drop type T_NUMBER;
--创建一个与T_VarcharArray的id同类型的不定长数组的定义
create or replace type T_NUMBER as table of number(10);
/
create or replace procedure P_VARCHAR2_LST(
i_t_varchar IN t_varchar, --输入参数为定义的不定长varchar2数组
o_n_ret OUT number --输出参数,正常结束,则输出0,否则抛出异常
)
is
begin
FOR i in 1..i_t_varchar.COUNT loop --注意下标从1开始。
insert into T_VarcharArray values (i,i_t_varchar(i));
end loop;
o_n_ret :=0;
exception when others then
raise;
end;
/
create or replace function F_NUMBER_LST(
i_t_number IN t_number --输入参数为定义的不定长数值数组
)
return number --函数输出结果
is
begin
FOR i in 1..i_t_number.COUNT loop --注意下标从1开始。
insert into T_VarcharArray values (i_t_number(i),to_char(i));
end loop;
return 0;
exception when others then
raise;
end;
/
Varchar2NumberArray.java
第一篇貌似就这么结束了,这里讲的只是如何把String数组、int数组传入oracle并使用,下一节讲如何传出。
喜欢的朋友关注下,记得帮顶噢,合伙哈。