现在我有个包体,大概是这样
package body procedure a;
procedure b;
procedure c(
  v_table table%rowtype;
  for i in (select * from tab) loop;
    v_table.id:=function(v.id);
    v_table.name:=function(v.name);--函数处理数据,放在变量中
   insert into aaa select v_table.id,v_table.name from t; 
    insert into bbb select v_table.id,v_table.name  from t2; --处理完的数据插入某表中
end loop;
);
procedure d;end;运行包时,发现在过程C中出错,信息为数字或字符转换错误,character string buffer too small 。怀疑是
v_table table%rowtype;中2表的存储的字符精度问题,但不知道怎么调试,不知道是哪列还是哪些数据有问题。请高手帮忙解决下问题

解决方案 »

  1.   

    看看aaa,bbb和v_table table%rowtype的table是否匹配,
    建议把语句贴上,再看看
      

  2.   

    这种错误一般是类型不匹配吧,,如果调试的话,可以用plsql developer 设置断点,单步调试
      

  3.   

    plsql developer 中有个TEST WINDOW,
    在这个窗体在可以单步执行,准确定位到出错的语句上
      

  4.   

    在exception中,把相关的值用dbms_output打印出来
      

  5.   

    在过程里加个记录运行状态的变量,出错的时候一并输出:procedure a;
    procedure b;
    procedure c(
      v_table table%rowtype;
      v_debug  varchar2(100);
      begin
        v_debug :='start';
        for v in (select * from tab) loop;
          v_debug :='id:'||v.id||',name='||v.name;
          v_table.id:=function(v.id);
          v_debug :=v_debug||' func(id) OK!! ';
          v_table.name:=function(v.name);--函数处理数据,放在变量中
          v_debug :=v_debug||' func(name) OK!! ';
          insert into aaa select v_table.id,v_table.name from t;  
          insert into bbb select v_table.id,v_table.name from t2; --处理完的数据插入某表中
        end loop;
      exception
        when others then
            dbms_output.put_line(v_debug || SQLERRM);
      end;
    );
    procedure d;end;