PL/SQL 的匿名块写起来还挺灵活的,像输出 100 以内的质数这种小练手,刚好用它来练点基本语法也不错。嗯,逻辑上就是循环+判断是不是质数,用MOD
函数判断是否能整除,再加点IF
控制就成了。
质数判断思路蛮简单:从 2 开始遍历到 100,每个数再从 2 除到它的平方根,如果都除不尽,那它就是质数。PL/SQL 支持FOR
和WHILE
,你用哪个都行,我这边用的是FOR
循环,看着清爽。
代码长这样:
DECLARE
v_num NUMBER := 2;
v_flag BOOLEAN;
BEGIN
FOR v_num IN 2..100 LOOP
v_flag := TRUE;
FOR i IN 2..TRUNC(SQRT(v_num)) LOOP
IF MOD(v_num, i) = 0 THEN
v_flag := FALSE;
EXIT;
END IF;
END LOOP;
IF v_flag THEN
DBMS_OUTPUT.PUT_LINE(v_num);
END IF;
END LOOP;
END;
/
DBMS 自带的PUT_LINE
能直接输出结果,调试的时候也蛮方便的。如果你环境没配SERVEROUTPUT
,记得先打开:SET SERVEROUTPUT ON
。
哦对了,如果你对 PL/SQL 结构还不太熟,可以先看下创建命名 PL/SQL 块和PL/SQL 块概述这两个资料,内容比较基础,但挺清楚的。
如果你更习惯用别的语言写算法,比如Python
或者C++
,也可以参考一下这些相关文章:Python 输出素数、C++输出素数。不过嘛,用 PL/SQL 写这种逻辑题,也挺锻炼思路的~
如果你平时有写Oracle
的存储过程、触发器,那熟悉一下 PL/SQL 语法绝对不亏。建议多动手写写小块代码,慢慢就上手了。