提取程序以在PL / SQL中查找阶乘时出现PLS-00103错误

问题描述

这是我在sqllive在线ide中执行的代码

def get_queryset(self):

它给了我一个pls-00103:在遇到以下情况之一时遇到了符号“&”:”错误

这有什么问题?

解决方法

SQL Live不是SQL * Plus。 “&”号用于SQL * Plus替换变量,在SQL Live中不起作用。您需要先编辑匿名块并在每次运行前提供一个值。

,

在这里我真的看不到需要pl / sql循环。您可以使用递归查询很好地做到这一点:

with cte (n,fac) as (
    select ? n,1 fac from dual
    union all 
    select n - 1,fac * n from cte where n > 1
)
select max(fac) as result from cte

问号代表查询的参数,即您要计算其阶乘的数字。

Demo on DB Fiddle :例如,当给定参数4时,查询返回:

<pre>
| RESULT |
| -----: |
|     24 |
</pre>

...是计算1 * 2 * 3 * 4的结果。

您也可以这样表达:

with cte (n,fac) as (
    select 4 n,4 fac from dual
    union all 
    select n - 1,fac * (n - 1) from cte where n > 1
)
select max(fac) as result from cte