declare
  type v_ar is varray(400) of varchar2(4000);
  
  my_ar v_ar := v_ar(sysdate,
                     sysdate-1,
                     sysdate-2);
     sqlstr varchar2(100);                
 begin
   for i in 1 .. my_ar.count loop
    sqlstr:='insert into ddd (sys_date) values(my_ar(i))';
    Execute Immediate sqlstr;
    commit;
  end loop;
end;
--my_ar 标示符无效

解决方案 »

  1.   

    sqlstr:='insert into ddd (sys_date) values(:my_ar)';
    execute immediate sqlstr using my_ar(i);
      

  2.   

    谢了 ,高手问下 用我的那种方法不对吗 我又改了一下declare
      type v_ar is varray(400) of varchar2(4000);
      my_ar v_ar := v_ar(sysdate,sysdate-1,sysdate-2);
      sqlstr varchar2(100);                   
                         
     begin
       for i in 1 .. my_ar.count loop
         sqlstr:='insert into ddd values('||my_ar(i)||')';
        execute immediate sqlstr;
        commit;
      end loop;
    end;插入的值是日期型  运行提示 11Line缺少逗号,
      

  3.   


    你插入的是一个日期类型,你用动态语句连接一个日期类型,会把日期类型转变成一个字符串类型,这样类型就不匹配了。其实,你根本没必要使用动态sql插入数据直接 insert into dd values(my_ar(i)),不是更方便吗?