在运行时取值并在 PlSQL 中打印它的阶乘

问题描述

我试图在运行时获取一个数字的阶乘,但出现错误

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 块;或
  • 您在提供替换变量时输入的内容(但由于您再次未提及您要替换的内容,我们无法对此发表评论)。