oracle - ORA-01001: 使用“for”循环的查询中的游标无效
问题描述
我正在尝试使用游标编写一个简单的查询,但是我不断收到这个臭名昭著的“无效游标”错误。这是我的代码。
DECLARE
v_deptno NUMBER := 10;
c_last_name employees.last_name%TYPE;
c_salary employees.salary%TYPE;
c_manager_id employees.salary%TYPE;
CURSOR c_emp_cursor IS
SELECT last_name, salary, manager_id FROM employees
WHERE department_id = v_deptno;
BEGIN
--OPEN c_emp_cursor;
-- commented out because for loop opens the cursor automatically
FOR employee IN c_emp_cursor
LOOP
FETCH c_emp_cursor INTO c_last_name, c_salary, c_manager_id;
EXIT WHEN c_emp_cursor%NOTFOUND;
IF c_salary < 5000 THEN
IF c_manager_id = 101 OR c_manager_id = 124 THEN
dbms_output.put_line(c_last_name || 'due for a raise.');
ELSE
dbms_output.put_line(c_last_name || ' not due for a raise.');
END IF;
END IF;
END LOOP;
--CLOSE c_emp_cursor;
END;
可能出了什么问题,解决方案是什么?我已经尝试为类似问题应用可能的解决方案,但没有一个真正符合我的问题。
解决方案
正如您注释掉OPEN
and ,出于同样的原因CLOSE
,您也应该删除FETCH
and 。EXIT
此外,现在您在FOR
语句中有一个游标变量,所以 - 使用它。像这样的东西:
BEGIN
FOR employee IN c_emp_cursor
LOOP
IF employee.salary < 5000 THEN
IF employee.manager_id = 101 OR employee.manager_id = 124 THEN
dbms_output.put_line(employee.last_name || 'due for a raise.');
ELSE
dbms_output.put_line(employee.last_name || ' not due for a raise.');
END IF;
END IF;
END LOOP;
END;
推荐阅读
- sql - 存储过程批量更新
- javascript - 如何用 jest 和 cucumber 测试 Angular 6?
- python - How to perform a non recursive copy using python
- javascript - 哪种方法适合使用 React ref?
- javascript - 如何避免 IE 使用 javascript 重定向到自定义 404 页面
- r - 使用贝叶斯推理找出变量之间的关系
- java - 使用 CODE JAVA 生成带有 wsdl 的类,因为我跳过了证书
- dialogflow-es - 从谷歌上的操作中注销用户
- parsing - 如何管理bison中变量声明的语义规则
- sql - sybase脚本看不懂麻烦