更正下,漏了定义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;

解决方案 »

  1.   

    1、将数组转换成逗号分隔字符串,在存储过程中解析
    2、自己创建个类型,用于接收数组
    CREATE TYPE array_table AS TABLE OF VARCHAR2 (50);
    可以看下这个博客http://jackyrong.iteye.com/blog/1669733
      

  2.   

    plsql里面的复杂数据类型有 数组类型
      

  3.   


    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;如上,基本搞定,不知道有没问题,感谢二楼和各位参与,先去测试下了
      

  4.   

    按你提供的文章,存储过程基本搞定,但还有一个小问题,不知道能不能继续指定下。
    我用的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();
    }
    });不知道怎么解决,请各位大虾继续指教,谢谢
      

  5.   

    String array[] = {"one", "two", "three","four"};        
     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