更正下,漏了定义icreate or replace procedure procedure_my(id in number, ageArray in int[]) is
length number;
i number;
begin
i := 0;
length := ageArray.length;--这样写不对,那怎么求长度?
for i in 0..length loop
insert into Test(id ,age)
values(id ,ageArray [i]);--ageArray [i]这样写也不行吧?那怎么循环求值?
end loop;
commit;end procedure_my;
length number;
i number;
begin
i := 0;
length := ageArray.length;--这样写不对,那怎么求长度?
for i in 0..length loop
insert into Test(id ,age)
values(id ,ageArray [i]);--ageArray [i]这样写也不行吧?那怎么循环求值?
end loop;
commit;end procedure_my;
2、自己创建个类型,用于接收数组
CREATE TYPE array_table AS TABLE OF VARCHAR2 (50);
可以看下这个博客http://jackyrong.iteye.com/blog/1669733
create type array_int as table of number;
create or replace procedure procedure_my(id in number, ageArray inarray_int ) is
length number;
i number;
begin
i := 0;
length := ageArray.count;
for i in 1..length loop
insert into Test(id ,age)
values(id ,ageArray (i));
end loop;
commit;
end procedure_my;如上,基本搞定,不知道有没问题,感谢二楼和各位参与,先去测试下了
我用的SSH框架,用下面的方法来调用存储过程,我发现,直接把数组传进去,不行,但此时要不知道怎么处理。
int id = 111;
int[] ageArray = = new int[]{21,22,23,24,25};
final String sql = "{call procedure_my("+id+","+ageArray +")}";//这样写不对,但java调用,除了这样写,不知道还能怎么写,头疼,也就是说,是不是这样调用,没办法传递数组对象了?HibernateTemplate template = (HibernateTemplate) context.getBean("hibernateTemplate"); template.execute(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
return session.createSQLQuery(sql).executeUpdate();
}
});不知道怎么解决,请各位大虾继续指教,谢谢
ArrayDescriptor des = ArrayDescriptor.createDescriptor("SchemaName.ARRAY_TABLE", con);
ARRAY array_to_pass = new ARRAY(des,con,array);
CallableStatement st = con.prepareCall("call SchemaName.proc1(?,?,?)");
st.setArray(1, array_to_pass);
st.registerOutParameter(2, Types.INTEGER); st.registerOutParameter(3,OracleTypes.ARRAY,"SchemaName.ARRAY_INT");
st.execute(); 转自:http://jackyrong.iteye.com/blog/1669733