PLSQL - 不創建自定義函數計算10的階乘

法1:CONNECT BY結合使用DBMS_AW.EVAL_NUMBER

SELECT dbms_aw.eval_number(substr(sys_connect_by_path(LEVEL, '*'), 2)) f
  FROM dual
 WHERE connect_by_isleaf = 1
CONNECT BY LEVEL <= 10;

法2:利用對數運算法則(積的對數等於對數的和)

SELECT power(10, SUM(log(10, LEVEL))) FROM dual CONNECT BY LEVEL <= 10;

法3:利用遞歸子查詢

WITH factorial(n, f) AS
 (SELECT 1 n, 1 f
    FROM dual
  UNION ALL
  SELECT n + 1, f * (n + 1)
    FROM factorial
   WHERE n < 10)
SELECT MAX(f) f FROM factorial;

法4:MODEL子句迭代器

WITH factorial AS
 (SELECT n, f
  FROM (SELECT LEVEL n FROM dual CONNECT BY LEVEL <= 10) 
  MODEL RETURN UPDATED ROWS 
  DIMENSION BY(n) MEASURES(0 f) 
  RULES ITERATE(10)
  (f[n] ORDER BY n = presentv(f[cv(n) - 1], f[cv(n) - 1], 1) * cv(n)))
SELECT MAX(f) FROM factorial;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章