CREATE OR REPLACE FUNCTION printsum(n IN number) IS
res number:=0;
BEGIN
while(n>0)
LOOP
res:=res+n;
n:=n-1;
EXIT WHEN n=0;
END LOOP;
dbms_output.put_line(' result of sum: '||res);
END;
/
我正在尝试打印n个数字的总和,但是出现以下错误:
警告:函数创建时出现编译错误。
答案 0 :(得分:4)
两件事:
使用公式可以给您恒定的时间答案。
function printsum(n pls_integer) return n is
begin
if(n < 0) then raise value_error; end if; -- or a more meaningful exception
return (n * (n + 1) / 2);
end;
答案 1 :(得分:0)
您的代码中几乎没有错误。
1)Function
必须具有Return
,但是您的代码在开始和结束时都缺少Return
语句。
2)IN
参数不能在代码内重新分配。因此,您需要将IN
参数复制到变量中以进行迭代。
尝试一下:
CREATE OR REPLACE FUNCTION printsum( n IN NUMBER)
RETURN NUMBER
IS
res NUMBER:=0;
v_num NUMBER:=n;
BEGIN
WHILE(v_num>0)
LOOP
res := res + v_num;
v_num := v_num -1;
EXIT WHEN v_num=0;
END LOOP;
dbms_output.put_line(' result of sum: '||res);
RETURN(res);
END;
/
输出:
SQL> select printsum(10) from dual;
PRINTSUM(10)
------------
55
答案 2 :(得分:0)
以下代码段是解决方案:
declare
sm number;
tmp number;
n number;
i number;
function sumn(n integer)
return number
is
sm number;
begin
sm:=0;
tmp:=n;
for i in 1..tmp LOOP
sm:=sm+i;
END LOOP;
return sm;
END;
begin
n:=10;
sm:=sumn(n);
dbms_output.put_line('sum is',sm);
end;
/