1.要求两个number型数据进行比较,当第一个数小于等于第二个数时,直接返回第一个数,否则 将第一个数用递归方法每次减0.02-0.03之间的任意一个数值,取第一个满足小于第二个数的值为返回值。下面是我写的函数,但是执行GetHuayhbl(0.6,0.4)时返回为空,执行GetHuayhbl(0.41,0.4) 时返回正常,请高手帮忙解决一下,不胜感激create or replace function GetHuayhbl(stad in number,hstad in number) return number is
  Result number(15,10);
begin
  if stad<=hstad then
   Result :=stad;
   return(Result); 
  else
  loop
    DECLARE
      v_stad number(15,10);
      CURSOR h_stad IS
       select round_new(dbms_random.value(0.02,0.03),10) from dual;
    begin
      open h_stad;
        loop
        FETCH h_stad INTO v_stad;
        EXIT WHEN h_stad %NOTFOUND;
         v_stad:=stad-v_stad;
         if v_stad<=hstad then
          Result :=v_stad;
          return(Result); 
         end if;
        end loop;
       close h_stad;
    end;
   end loop;
  end if;
end GetHuayhbl;

解决方案 »

  1.   

    round_new是什么?
    问题应该出在那个游标循环里,取到了空值
    我改下一遍
    create or replace function GetHuayhbl(stad in number,hstad in number) return number is 
      Result number(15,10); 
    begin 
    if stad<=hstad then return stad;
    else
      result:=stad;
      loop
      result:=result-round(dbms_random.value(0.02,0.03),10);
      exit when result<=hstad;
      end loop;
      return result;
    end if;
    end;
      

  2.   

    round_new 是新的小数取舍方法,主要是四舍六入五看双问题已经解决,谢谢