oracle - 存储过程中的循环总是永远打印最后一个值
问题描述
我在学习 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;
解决方案
您的循环中需要一个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;
/
推荐阅读
- selenium - 为什么 selenium webdriver 找不到元素
- python - 如何在 Python 中从 PHP API 获取文本
- image - 将现有代码更改为基于位图单色的彩色像素
- c# - 避免为异步方法重新创建事件委托
- python - 在python中复制sumif公式
- google-chrome - 无法创建 chrome 开发者帐户来发布 chrome 扩展
- mongodb - docker-compose 文件不会从专用 env 文件中获取环境变量,导致数据库播种失败
- idoc - 在 BODS 中使用 IDoc 进行数据迁移
- css - 完整的 CSS 规则作为 SCSS 中的变量
- json - 在 Interface{} 中存储配置结构并将其转换回原始结构