PL/SQL 的匿名块写起来还挺灵活的,像输出 100 以内的质数这种小练手,刚好用它来练点基本语法也不错。嗯,逻辑上就是循环+判断是不是质数,用MOD函数判断是否能整除,再加点IF控制就成了。

质数判断思路蛮简单:从 2 开始遍历到 100,每个数再从 2 除到它的平方根,如果都除不尽,那它就是质数。PL/SQL 支持FORWHILE,你用哪个都行,我这边用的是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 语法绝对不亏。建议多动手写写小块代码,慢慢就上手了。