PL / SQL ORACLE中的递归函数

时间:2015-03-18 17:06:45

标签: oracle recursion plsql

在哪种情况下递归可以在PL / SQL中使用

CREATE OR REPLACE FUNCTION factorial (
  n POSITIVE
) RETURN POSITIVE
IS
BEGIN
  IF n = 1 THEN
    RETURN n;
  ELSE
  RETURN n * factorial(n-1);
  END IF;
END;
BEGIN
  FOR i IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE(i || '! = ' || factorial(i));
  END LOOP;
END;

这将有效,但我想在现实世界中了解数据库查询中需要递归

1 个答案:

答案 0 :(得分:3)

取决于您的意思"必需"。递归算法总是可以重写为循环,并且循环总是可以重写为递归算法(假设您正在使用的语言支持循环和函数调用)。一些算法往往更容易通过递归实现,而其他算法往往更容易通过循环实现。

使用递归来计算PL / SQL中的阶乘是一个合理的实现选择。使用循环也是合理的。如果你想在纯SQL中而不是诉诸PL / SQL,你也可以

 select round( exp( sum( ln( level ) ) ) )
   from dual
connect by level <= <<some number>>

您使用哪种合理的实施方案取决于多种因素 - 您最熟悉的方法,各种实施的速度等等。