Postgresql - 基本循环

时间:2012-03-13 03:28:28

标签: postgresql loops for-loop

必须编写一个函数,它返回2个用户输入数字之间所有平方的总和。这是我写的,但似乎无法使它工作。 例如。 sumAll(2,5)必须给结果54 。

CREATE OR REPLACE FUNCTION SumAll(integer,integer) RETURNS integer as $$
DECLARE
    num1 ALIAS for $1;
    num2 ALIAS for $2;
    ret_sum integer;
    sum1 integer;
BEGIN

    for i in num1..num2 LOOP
        sum1:=i*i;
        ret_sum=ret_sum+sum1;
    END LOOP;
    return ret_sum;
END
$$ language 'plpgsql';

它不起作用。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

您忘记初始化一个变量,在for循环之前添加ret_sum:=0;

答案 1 :(得分:1)

@pukipuki指出了你的错误。不过,我通常会简化语法:

CREATE OR REPLACE FUNCTION sumall(_num1 int, _num2 int, OUT ret_sum int)
  RETURNS int AS
$BODY$
BEGIN
    ret_sum := 0;

    FOR i IN _num1 .. _num2 LOOP
      ret_sum := ret_sum + i*i;
    END LOOP;
END
$BODY$ LANGUAGE plpgsql;