create or replace package a_package_name2
as
type numberArray is table of number index by binary_integer;
type varcharArray is table of varchar2 index by binary_integer;procedure insert_procedure_name
(
  v_id  in  numberArray,
  v_value in varcharArray
);procedure update_procedure_name
(
  v_id  in numberArray,
  v_value in varcharAray
);end;
create or replace package body a_package_name2
asprocedure insert_procedure_name
(
  v_id  in numberArray,
  v_value in varcharAray
)
is
str_id number :=0;
str_value varchar2 :'';
begin
for i in 1..v_id.count
loop
    begin
         str_id=v_id(i);
         str_value=v_value(i);
         begin
              insert into test(id,value) values(str_id,str_value);
         end;
    end;
end loop;
end procedure insert_procedure_name;procedure update_procedure_name
(
  v_id  in numberArray,
  v_value in varcharAray
)
is
str_id number :=0;
str_value varchar2 :'';
begin
for i in 1..v_id.count
loop
    begin
         str_id=v_id(i);
         str_value=v_value(i);
         begin
              update test set value=str_value where id=str_id;
         end;
    end;
end loop;
end procedure insert_procedure_name;end a_package_name2;

解决方案 »

  1.   


    str_value varchar2 :'';
    --改为
    str_value varchar2 :='';
      

  2.   


    str_id=v_id(i);
      str_value=v_value(i);
    --改为
    str_id:=v_id(i);
      str_value:=v_value(i);
      

  3.   

    还是不行啊??????? 大哥帮我调试一把行吗??????????我ORACLE不太熟,,
      

  4.   

    我创建的test表是这样的
    create table test
    (
       id number,
       value varchar
    )
      

  5.   


    create or replace package a_package_name2
    as
    type numberArray is table of number index by binary_integer;
    type varcharArray is table of varchar2(20) index by binary_integer;procedure insert_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    );procedure update_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray--你写成varcharAray了
    ); end;
    /我这网速太慢了,打开了半天日,这个包可执行了,我看下包体
      

  6.   

    哥子,你这错误也太多了点..
    建议还是先学习一下语法..
    帮你调试了一把,VARCHAR2类型不晓得你的长度要多少,全部定义成100:
    create table test
    (
      id number,
      value VARCHAR2(100)
    )
    /
    create or replace package a_package_name2
    as
    type numberArray is table of number index by binary_integer;
    type varcharArray is table of VARCHAR2(100) index by binary_integer;procedure insert_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    );procedure update_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    );end;
    /create or replace package body a_package_name2
    asprocedure insert_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    )
    is
    str_id number :=0;
    str_value VARCHAR2(100) :='';
    begin
    for i in 1..v_id.count
    loop
      begin
      str_id:=v_id(i);
      str_value:=v_value(i);
      begin
      insert into test(id,value) values(str_id,str_value);
      end;
      end;
    end loop;
    end insert_procedure_name;procedure update_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    )
    is
    str_id number :=0;
    str_value VARCHAR2(100) :='';
    begin
    for i in 1..v_id.count
    loop
      begin
      str_id:=v_id(i);
      str_value:=v_value(i);
      begin
      update test set value=str_value where id=str_id;
      end;
      end;
    end loop;
    end update_procedure_name;end a_package_name2;
      

  7.   


    create or replace package body a_package_name2
    as
    procedure insert_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    )
    is
    str_id number :=0;
    str_value varchar2(20):='';
    begin
    for i in 1 .. v_id.count
    loop
      str_id:=v_id(i);
      str_value:=v_value(i);
      insert into test(id,value) values(str_id,str_value);
    end loop;
    end insert_procedure_name;procedure update_procedure_name
    (
      v_id in numberArray,
      v_value in varcharArray
    )
    is
    str_id number :=0;
    str_value varchar2(20) :='';
    begin
    for i in 1 .. v_id.count
    loop
      str_id:=v_id(i);
      str_value:=v_value(i);
      update test set value=str_value where id=str_id;
    end loop;
    end  update_procedure_name;
    end a_package_name2;
    /
    --这个可以执行了,你的错误太多了,自已对照吧可以用show errors来查看哪里错了表这样建,指定大小create table test
    (
      id number,
      value varchar2(20)
    );