В вашем коде несколько ошибок.
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