gpt4 book ai didi

oracle - ORA-01001 : invalid cursor in a query using the 'for' loop

转载 作者:行者123 更新时间:2023-12-02 00:12:05 24 4
gpt4 key购买 nike

我正在尝试使用游标编写一个简单的查询,但是我一直收到这个臭名昭著的“无效游标”错误。这是我的代码。

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;

可能出了什么问题,解决方案是什么?我已经尝试为类似的问题应用可能的解决方案,但没有一个真正符合我的问题。

最佳答案

当您注释掉 OPENCLOSE 时,您还应该删除 FETCHEXIT,因为同样的道理。此外,现在您在 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;

关于oracle - ORA-01001 : invalid cursor in a query using the 'for' loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58664812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com