the*_*ace -3 database oracle plsql
此代码用于打印1到30之间的非素数.它是如何工作的以及错误在哪里.
BEGIN
<<outer>>
FOR i in 1..30
<<inner>>
for k in 2..i-1 loop
if (mod(i, k) = 0) THEN
DBMS_OUTPUT.PUT_LINE(i);
exit inner when (mod(i, k)= 0);
end if;
end loop inner
end loop outer
end;
Run Code Online (Sandbox Code Playgroud)
喝咖啡休息时间,所以这里是一个纯粹的SQL实现.
with data as ( select level as n# from dual
connect by level <= 30 )
select distinct d1.n#
from data d1 cross join data d2
where d1.n# > d2.n#
and d2.n# != 1
and mod(d1.n#, d2.n#) = 0
order by d1.n#
Run Code Online (Sandbox Code Playgroud)
虚伪?哎呀!
该解决方案具有与@TYH在PL/SQL解决方案中指出的相同的低效率.这就是它需要的原因distinct.可能这可以通过递归CTE进行优化(仅适用于11gR2).
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |