You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL游标仅返回最后一条记录问题求助

问题原因

你当前代码仅输出最后一条记录,是因为dbms_output.put_line语句写在了循环外部。循环执行时,每次FETCH操作都会覆盖变量V_NAME1和N_CLASS1的值,循环结束后变量里只剩最后一次读取的记录内容,因此只输出了C30。

解决方案1:调整输出语句位置

把输出语句移到循环内部,确保每次读取到有效记录后立即输出:

DECLARE
    V_NAME1 Students.V_NAME%TYPE;
    N_CLASS1 Students.N_CLASS%TYPE;
    
    CURSOR C1 IS SELECT V_NAME, N_CLASS from students;
BEGIN
    OPEN C1;
    LOOP 
        FETCH C1 INTO V_NAME1, N_CLASS1;
        EXIT WHEN C1%NOTFOUND;
        -- 读取到有效记录后立即输出
        dbms_output.put_line(V_NAME1 || N_CLASS1);
    END LOOP;
    CLOSE C1;
END;
/
解决方案2:使用隐式游标(推荐)

PL/SQL的隐式游标(FOR循环)无需手动处理游标打开、读取、关闭操作,代码更简洁且不易出错:

DECLARE
BEGIN
    FOR rec IN (SELECT V_NAME, N_CLASS FROM Students) LOOP
        dbms_output.put_line(rec.V_NAME || rec.N_CLASS);
    END LOOP;
END;
/

执行上述任意代码后,会输出所有3条记录:

A10
B20
C30

内容的提问来源于stack exchange,提问作者Jigyesh Pareek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:51:06