现在我有个包体,大概是这样
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表的存储的字符精度问题,但不知道怎么调试,不知道是哪列还是哪些数据有问题。请高手帮忙解决下问题
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表的存储的字符精度问题,但不知道怎么调试,不知道是哪列还是哪些数据有问题。请高手帮忙解决下问题
建议把语句贴上,再看看
在这个窗体在可以单步执行,准确定位到出错的语句上
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;