rip*_*ppy 1 oracle plsql syntax-error
以下pl/sql程序在行上执行生成错误sum:= temp*sum; 遇到符号; 期待时(.请解释我的错误.
declare
n number;
temp number;
sum number := 1;
begin
n := &n;
temp := n;
while temp>0 loop
sum := temp*sum;
temp := temp-1;
end loop;
dbms_output.put_line('Factorial of '||n||' is '||sum);
end;
/
Run Code Online (Sandbox Code Playgroud)
也许不是你问题的答案,但这里不需要PL/SQL:
select round(exp(sum(ln(level))))
from dual
connect by level <= 5;
Run Code Online (Sandbox Code Playgroud)
其中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_;
Run Code Online (Sandbox Code Playgroud)
所以有两个不同内容的功能.测试查询:
declare
dummy number;
begin
for i in 1..10000 loop
dummy := test_.by_query(5);
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
0.094秒
declare
dummy number;
begin
for i in 1..10000 loop
dummy := test_.by_plsql(5);
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
0.094秒
你会说我是骗子并使用deterministic关键字,但这里显而易见并且需要逻辑.如果我删除它,相同的脚本工作1.7秒对1.3秒,所以程序只是更快一点,性能甚至没有双赢.如果在查询中使用该函数,则会产生完全相反的效果,因此这是一种公平交易.
| 归档时间: |
|
| 查看次数: |
26400 次 |
| 最近记录: |