大侠们,怎样给oracle存储过程传递数组参数啊
CREATE OR REPLACE PROCEDURE "PIC_INSERT" (FILENAME IN v_arrary) IS 
F_LOB BFILE; 
B_LOB BLOB; 
BEGIN 
for i in 1..10 
loop 
INSERT INTO PIC_LOB(PIC_ID, PIC) 
VALUES (licheng.nextval,FILENAME(i)); 
end loop; 
COMMIT; 
END; 
上面是存储过程Dim FILENAME() AS Variant;
FILENAME()=.........
Cmd.CommandText = "pic_insert" 
  Cmd.Parameters.Append Cmd.CreateParameter("FILENAME", adArray, adParamInput, 500, FILENAME) 
  Cmd.Execute 执行时出现如下错误 
实时错误'3001' 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突

解决方案 »

  1.   

    是一样的啊
    CREATE OR REPLACE PROCEDURE "PIC_INSERT" (FILENAME IN v_arrary)
    中的v_array是我在oracle定义的一个数组
      

  2.   

    参考一下:
    SQL> create or replace type myvarray_list as varray(10) of varchar2(50);
      2  /类型已创建。SQL> create or replace procedure show_list(
      2  p_varlist in myvarray_list
      3  )
      4  is
      5  str varchar2(50);
      6  begin
      7  for x in 1..p_varlist.count loop
      8  dbms_output.put_line('p_varlist('||x||')='||p_varlist(x));
      9  end loop;
     10  end;
     11  /过程已创建。SQL> exec show_list(myvarray_list('Oracle','DB2','Sql Server','mySql','DBA'));
    p_varlist(1)=Oracle
    p_varlist(2)=DB2
    p_varlist(3)=Sql Server
    p_varlist(4)=mySql
    p_varlist(5)=DBAPL/SQL 过程已成功完成。SQL>
      

  3.   

    用动态sql试试。如:SQL> declare
      2  mysql varchar2(200);
      3  begin
      4  mysql:='begin show_list(myvarray_list('''||'Oracle'''||','''||'DB2'''||')); end;';
      5  execute immediate mysql;
      6  end;
      7  /
    p_varlist(1)=Oracle
    p_varlist(2)=DB2PL/SQL 过程已成功完成。SQL>
      

  4.   

    to njhart2003 
    你的方法我试过,是可以执行的关键是我想用vb给oracle的存储过程传递一个数组参数,老是出现错误
      

  5.   

    没有VB环境,不好测试。我觉得有点难:
    Cmd.Parameters.Append Cmd.CreateParameter("FILENAME", adArray, adParamInput, 500, FILENAME) 你数组定义的参数类型没有指定,可能不会匹配存储过程里数组的类型。
    因为存储过程里定义的数组参数是自定义的,不是标准的。VB不可能知道这个类型。
      

  6.   


      1  create or replace procedure show_list(
      2  p_varlist in myvarray_list
      3  )
      4  is
      5  str varchar(50);
      6  begin
      7  for x in 1.. p_varlist.count loop
      8  dbms_output.put_line('p_varlist('||x||')='||p_varlist(x));
      9  end loop;
     10* end;
    c:\>/过程已创建。c:\>exec show_list(myvarray_list('oracle','db2','sqlserver'));PL/SQL 过程已成功完成。执行后没反映呀? 没也输出~~
      

  7.   

    用到dbms_output包时,需要在sqlplus里设置一下环境变量:
    set serveroutput on size 1000000