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;
这一行 

解决方案 »

  1.   

    引用 6 楼 inthirties 的回复:指向returnProName:=returnProName ||' ' || v_result;这一行 可能是指向returnProName的长度已经超过了定义的长度了。 
    你可以在循环里output一下returnProName的长度,看是循环到什么时候操过长度的。
      

  2.   

    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; 
          dbms_output.put_line(returnProName);
      end loop; 
    close c_proName;    
    return (returnProName); 
    end NewFormatName; 
    数据有点多,加了 dbms_output.put_line(returnProName);
     PL/SQL 快挂了
      

  3.   

    那有可能是returnProName超过了定义的长度了。你可以把 dbms_output.put_line(returnProName); 拿走,加个判断,就是大于1500(定义的长度)才打出来信息。看有没有这条信息打出来。
      

  4.   


    在sqlplus里执行set serveroutput on;
    或者在plsql里加入dbms_output.enable();是信息可以输出。
      

  5.   

    那有可能是returnProName超过了定义的长度了。你可以把 dbms_output.put_line(returnProName); 拿走,加个判断,就是大于1500(定义的长度)才打出来信息。看有没有这条信息打出来。
      

  6.   

    如果对品名输出顺序没什么要求,可以用WMSYS.WM_CONCAT函数来实现
      

  7.   

    http://topic.csdn.net/u/20090627/15/09a158ee-637c-4083-8220-6a4da35a4a51.html这个帖子和该贴是同一个问题,大家可以看一看
      

  8.   

    http://topic.csdn.net/u/20090627/15/09a158ee-637c-4083-8220-6a4da35a4a51.html 
    该贴和这个是同一问题,可以看一下  总共140分如果只查询3条记录出来  也报同样的错误:ORA-06502 PL/SQL 数字或值错误,ORA-06512 
    数字或值错误  指向 returnProName:=returnProName ||' ' || v_result; 
    这一行   这个错误大意是说 查询得到的结果超出了函数返回值的范围 
    函数返回值类型为varchar2(3000),如果只查3个值得话是绝对不会超出范围的,顶一下  这是为什么咧?