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;
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;
问题应该出在那个游标循环里,取到了空值
我改下一遍
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;