问题描述
DECLARE
fact number :=1;
n number := &1;
BEGIN
while n > 0 loop
fact:=n*fact;
n:=n-1;
end loop;
dbms_output.put_line(fact);
END;
解决方法
你可以尝试用数学来实现阶乘。
SELECT EXP(SUM(LN(Level))) factorial
FROM dual
CONNECT BY Level <= &1
,
将 /
放在新行的末尾并在没有替换变量的情况下运行它,您的代码就可以工作了:
DECLARE
fact number :=1;
n number := 3;
BEGIN
while n > 0 loop
fact:=n*fact;
n:=n-1;
end loop;
dbms_output.put_line(fact);
END;
/
和输出:
6
dbfiddle here
既然您没有在问题中说明错误是什么,那么错误很可能与以下内容有关:
- 丢失的
/
和 Oracle 试图将其解析为 SQL 语句而不是 PL/SQL 块;或 - 您在提供替换变量时输入的内容(但由于您再次未提及您要替换的内容,我们无法对此发表评论)。