也許得不到答案更改變量名你的問題,但沒有必要對PL/SQL這裏:
select round(exp(sum(ln(level))))
from dual
connect by level <= 5;
其中5是你的電話號碼(5!
)
添加。如果您希望在PL/SQL中使用更快的操作,則使用pls_integer
而不是number
。
UPDATE
所以根據意見,我測試感到了自由:
create or replace package test_ is
function by_query(num number) return number deterministic;
function by_plsql(num number) return number deterministic;
end test_;
/
create or replace package body test_ is
function by_query(num number) return number deterministic
is
res number;
begin
select round(exp(sum(ln(level))))
into res
from dual
connect by level <= num;
return res;
end;
function by_plsql(num number) return number deterministic
is
n number := 0;
begin
for i in 1..num loop
n := n + ln(i);
end loop;
return round(exp(n));
end;
end test_;
所以有不同的內容兩種功能。測試查詢:
declare
dummy number;
begin
for i in 1..10000 loop
dummy := test_.by_query(5);
end loop;
end;
0.094秒。
declare
dummy number;
begin
for i in 1..10000 loop
dummy := test_.by_plsql(5);
end loop;
end;
0.094秒。
你會說我是個騙子,使用deterministic
關鍵字,但這裏顯而易見並且是邏輯所需要的。如果我刪除它,相同的腳本工作時間爲1.7秒和1.3秒,所以程序只會更快一點,甚至沒有雙贏的表現。如果您在查詢中使用該函數,您將獲得完全相反的效果,因此這是公平交易。
非常感謝。我一直在苦苦掙扎。 – rippy