在plsql中打印n个数字的总和

时间:2019-04-21 05:15:40

标签: plsql sum plsqldeveloper

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个数字的总和,但是出现以下错误:

  

警告:函数创建时出现编译错误。

3 个答案:

答案 0 :(得分:4)

两件事:

  1. 严格来说,数字不一定是整数,因此最好使用pls_integer或至少在代码中检查传入的参数是否为整数
  2. 如果问题在询问如何返回前n个正整数之和,则正确答案是使用封闭形式公式:n *(n + 1)/ 2

使用公式可以给您恒定的时间答案。

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;
/