create or replace function NewFormatName(orderid in orderhist.orderid%type)
return varchar2 is returnProName varchar2(1500);
v_proName varchar2(100);
v_num number(10);
v_result varchar2(400);
cursor c_proName is
select decode(od.prodname,'','',od.prodname) || '*' from orderdet od,orderhist oh where od.orderid=oh.orderid;
begin
open c_proName;
loop
fetch c_proName into v_result;
exit when c_proName%notfound;
returnProName:=returnProName ||' ' || v_result;
end loop;
close c_proName;
return (returnProName);
end NewFormatName;但是执行的时候报错:数字或值错误 指向 returnProName:=returnProName ||' ' || v_result;
这一行
你可以在循环里output一下returnProName的长度,看是循环到什么时候操过长度的。
return varchar2 is returnProName varchar2(1500);
v_proName varchar2(100);
v_num number(10);
v_result varchar2(400);
cursor c_proName is
select decode(od.prodname,'','',od.prodname) || '*' from orderdet od,orderhist oh where od.orderid=oh.orderid;
begin
open c_proName;
loop
fetch c_proName into v_result;
exit when c_proName%notfound;
returnProName:=returnProName ||' ' || v_result;
dbms_output.put_line(returnProName);
end loop;
close c_proName;
return (returnProName);
end NewFormatName;
数据有点多,加了 dbms_output.put_line(returnProName);
PL/SQL 快挂了
在sqlplus里执行set serveroutput on;
或者在plsql里加入dbms_output.enable();是信息可以输出。
该贴和这个是同一问题,可以看一下 总共140分如果只查询3条记录出来 也报同样的错误:ORA-06502 PL/SQL 数字或值错误,ORA-06512
数字或值错误 指向 returnProName:=returnProName ||' ' || v_result;
这一行 这个错误大意是说 查询得到的结果超出了函数返回值的范围
函数返回值类型为varchar2(3000),如果只查3个值得话是绝对不会超出范围的,顶一下 这是为什么咧?