首页 > 解决方案 > 存储过程中的循环总是永远打印最后一个值

问题描述

我在学习 pl/SQL 时可以访问数据库。当谈到甲骨文和女妖时,一开始可能会感到不知所措。

我要做的就是循环遍历从申请人表中选择的光标内容,并打印出申请人的名字。

我对语法不太熟悉,所以可能有问题,但循环打印很好,直到它到达最后一个值,然后它永远打印它,直到它无法分配更多内存。

提前谢谢你,如果这是一个愚蠢的问题,我很抱歉。

CREATE OR REPLACE PROCEDURE APPLICANTS IS
first_name APPLICANT.FNAME%TYPE;
CURSOR fnameCursor IS
SELECT FNAME
FROM APPLICANT
ORDER BY FNAME DESC;
BEGIN
OPEN fnameCursor;
LOOP
FETCH fnameCursor INTO first_name;
DBMS_OUTPUT.PUT_LINE(first_name);
END LOOP;
CLOSE fnameCursor;

END APPLICANTS;
/

EXECUTE APPLICANTS;

标签: oracleplsql

解决方案


您的循环中需要一个EXIT条件。

CREATE OR REPLACE PROCEDURE applicants IS
         first_name   applicant.fname%TYPE;
         CURSOR fnamecursor IS SELECT fname
                               FROM applicant
         ORDER BY fname DESC;
    BEGIN
         OPEN fnamecursor;
         LOOP
              FETCH fnamecursor INTO first_name;
              EXIT WHEN fnamecursor%NOTFOUND; -- This line is required.
              dbms_output.put_line(first_name);
         END LOOP;
         CLOSE fnamecursor;
    END applicants;
    /

推荐阅读